Files
Igor20264 510f7e7adf
Python application / build (push) Waiting to run
v0.5.2
Что то сделал
2026-09-08 19:37:54 +03:00

111 lines
2.0 KiB
Python

"""Intermediate IR blocks between DOCX walk and Markdown emit."""
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class InlineSpan:
text: str
bold: bool = False
italic: bool = False
strike: bool = False
href: str | None = None # external URL
math: str | None = None # inline latex-ish
@dataclass
class HeadingBlock:
level: int
text: str
numbered: bool = True # False → # *TITLE
@dataclass
class ParagraphBlock:
spans: list[InlineSpan] = field(default_factory=list)
style: str = "Normal"
is_bibliography: bool = False
biblio_key: str | None = None
@dataclass
class CaptionBlock:
kind: str # figure | table | listing
number: str
text: str | None = None
is_continuation: bool = False
landscape: bool = False
unique_id: str = ""
@dataclass
class ImageBlock:
rel_path: str # relative to md file
alt: str = ""
caption_id: str | None = None
caption_text: str | None = None
@dataclass
class TableBlock:
rows: list[list[str]]
merges: list[list[tuple[str, str]]] | None = None # (v, h) per cell
caption_id: str | None = None
caption_text: str | None = None
landscape: bool = False
@dataclass
class ListingBlock:
lines: list[str]
language: str = ""
caption_id: str | None = None
caption_text: str | None = None
@dataclass
class EquationBlock:
latex: str
number: str | None = None
unique_id: str | None = None
@dataclass
class ListBlock:
ordered: bool
items: list[str]
level: int = 1
@dataclass
class TocPlaceholder:
"""Emitted as # *СОДЕРЖАНИЕ + [TOC]."""
@dataclass
class PageBreakBlock:
pass
@dataclass
class SkipNote:
"""Logged skip; not emitted."""
message: str
Block = (
HeadingBlock
| ParagraphBlock
| CaptionBlock
| ImageBlock
| TableBlock
| ListingBlock
| EquationBlock
| ListBlock
| TocPlaceholder
| PageBreakBlock
| SkipNote
)