59ba0555bb
C1: LaTeX escaping спецсимволов (& % $ # _ { } ~ ^ \)
C2: text.capitalize() → first char uppercase only
C3: run_xelatex проверяет returncode
C4: парсинг лога при ошибке второго прохода
W1: Удалены мёртвые счётчики section/subsection/subsubsection
W2: text.upper() вычисляется один раз
W3: Единая сигнатура хендлеров (r, tok) для всех
W4: Джэгged строки таблицы паддятся до max колонок
W5: Пустой lang в code fence → без [language=]
W6: hr() вынесен из code.py в hr.py
W7: Валидация обязательных полей front matter
W8: Имя вуза конфигурируется через front matter
W9: -> None аннотация main()
W10: \n в конце END_DOCUMENT
+ Dockerfile: добавлен texlive-fonts-recommended
30 lines
748 B
Docker
30 lines
748 B
Docker
FROM python:3.14-slim
|
|
|
|
COPY --from=ghcr.io/astral-sh/uv:0.9.21 /uv /uvx /bin/
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
texlive-xetex \
|
|
texlive-lang-cyrillic \
|
|
texlive-latex-extra \
|
|
texlive-fonts-recommended \
|
|
fonts-liberation \
|
|
cabextract \
|
|
wget \
|
|
fontconfig \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN cd /tmp && \
|
|
wget -q https://downloads.sourceforge.net/corefonts/times32.exe && \
|
|
cabextract times32.exe && \
|
|
mkdir -p /usr/share/fonts/truetype/msttcorefonts && \
|
|
cp -f *.TTF /usr/share/fonts/truetype/msttcorefonts/ && \
|
|
fc-cache -f && \
|
|
rm -f /tmp/*.TTF /tmp/times32.exe
|
|
|
|
WORKDIR /build
|
|
COPY . .
|
|
RUN uv pip install --system --no-cache .
|
|
|
|
ENV UV_CACHE_DIR=/tmp/uv-cache
|
|
ENTRYPOINT ["md2gost"]
|