ours: наш оверлей к апстриму 1.5.1 (дельта для переноса в 1.6.0)

10 изменённых файлов + 2 новых (engineering/gost_titleblock.py, _fonts/isocpeur.ttf).
Ветка-донор для трёхстороннего переноса в ours-1.6.
This commit is contained in:
2026-10-05 18:04:55 +03:00
parent ca1c79fd01
commit 2e2a2b96a9
12 changed files with 3232 additions and 159 deletions
+26
View File
@@ -4,6 +4,32 @@ from __future__ import annotations
from dataclasses import dataclass
#: Инлайн-группа шрифта ГОСТ — ровно та, что стоит в каждом многострочном тексте
#: образца Павла (``{\fISOCPEUR|b0|i0|c204|p34;\Q0;Вентиляционный канал}``):
#: ``c204`` — кириллический набор, ``p34`` — плотность 3/4, ``\Q0`` — прямой
#: наклон. Шрифт назван внутри самой строки, поэтому надпись выглядит одинаково
#: на любом компьютере, даже если стиль чертежа подменят или SHX не найдётся.
INLINE_FONT_CODE = r"{\fISOCPEUR|b0|i0|c204|p34;\Q0;"
INLINE_FONT_FACE = "ISOCPEUR"
#: Признаки того, что содержимое уже размечено управляющими кодами MTEXT.
_INLINE_MARKUP_CHARS = ("\\", "{", "}")
def wrap_inline_font(text: str, inline_font: bool = True) -> str:
"""Завернуть содержимое многострочного текста в инлайн-группу ISOCPEUR.
Уже размеченный текст (обратные слэши, группы в фигурных скобках) не
трогаем и пишем как есть: вложенная группа ломает разбор MTEXT, а образец
показывает, что готовые коды переносятся в файл без переписывания.
"""
if not inline_font:
return str(text)
raw = str(text)
if any(char in raw for char in _INLINE_MARKUP_CHARS):
return raw
return f"{INLINE_FONT_CODE}{raw}}}"
@dataclass(frozen=True)
class TableLayout: