Files
Igor20264 516abe7b83
Python application / build (push) Has been cancelled
BigUpdate
2026-09-03 10:44:08 +03:00

52 lines
1.7 KiB
Python

from md2gost.renderable import Renderable
from md2gost.renderable.heading import Heading
from md2gost.renderable.toc import ToC
from md2gost.util import create_element
def _enable_update_fields_on_open(document) -> None:
"""Ask Word to refresh fields (TOC) when the document is opened."""
settings = document.settings.element
# Remove existing updateFields if any
for child in list(settings):
if child.tag.endswith("}updateFields"):
settings.remove(child)
settings.append(create_element("w:updateFields", {"w:val": "true"}))
class TocProcessor:
def process(self, renderables: list[Renderable]):
renderables_iter = iter(renderables)
toc = None
for renderable in renderables_iter:
if isinstance(renderable, ToC):
toc = renderable
break
if not toc:
return
if toc.toc_mode == "native":
# Field already in body from render; ensure dirty + updateFields
toc.fill()
try:
doc = toc._paragraph._docx_paragraph.part.document
_enable_update_fields_on_open(doc)
except Exception:
pass
return
for renderable in renderables_iter:
if isinstance(renderable, Heading):
title = (renderable.text or "").strip()
if title.upper() == "СОДЕРЖАНИЕ":
continue
toc.add_item(
renderable.level,
renderable.text,
renderable.rendered_page,
renderable.is_numbered,
)
toc.fill()