Support evaluation-local configuration and names overrides
This commit is contained in:
1 parent
0bb6f7d97c
commit
d4404e4c27
36 files changed
+409
-184
No files matched your search
+8
-8
@@ -1,6 +1,7 @@
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
from copienator import configuration
|
||||
from copienator import EvaluationWorkspace
|
||||
from .platform import validate_windows_labels
|
||||
|
||||
@@ -177,7 +178,6 @@ import tempfile
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
from .configuration import LATEX_AFTER, LATEX_BEFORE
|
||||
|
||||
LATEX_WARNING_MARKER = "[Copienator:latex-warning] "
|
||||
|
||||
@@ -190,19 +190,19 @@ def report_latex_warning(output_pdf_path) -> None:
|
||||
def fragment_latex_header(source_path=None):
|
||||
"""Keep source packages/macros while using the configured fragment layout."""
|
||||
if source_path is None:
|
||||
return LATEX_BEFORE
|
||||
return configuration.LATEX_BEFORE
|
||||
source = Path(source_path).read_text(encoding="utf-8")
|
||||
# Ignore commented document commands when locating the preamble.
|
||||
source = re.sub(r"(?m)(?<!\\)%[^\n]*", "", source)
|
||||
begin = re.search(r"\\begin\s*\{document\}", source)
|
||||
document_class = r"\\documentclass(?:\s*\[[^\]]*\])?\s*\{[^}]+\}"
|
||||
configured_class = re.search(document_class, LATEX_BEFORE)
|
||||
configured_begin = re.search(r"\\begin\s*\{document\}", LATEX_BEFORE)
|
||||
configured_class = re.search(document_class, configuration.LATEX_BEFORE)
|
||||
configured_begin = re.search(r"\\begin\s*\{document\}", configuration.LATEX_BEFORE)
|
||||
if begin is None or configured_class is None or configured_begin is None:
|
||||
return LATEX_BEFORE
|
||||
return configuration.LATEX_BEFORE
|
||||
preamble = source[:begin.start()]
|
||||
if not re.search(document_class, preamble):
|
||||
return LATEX_BEFORE
|
||||
return configuration.LATEX_BEFORE
|
||||
preamble = re.sub(document_class, lambda _: configured_class.group(), preamble, count=1)
|
||||
# geometry overrides standalone's crop coordinates and can produce blank or
|
||||
# clipped PDFs even when LaTeX succeeds. Keep other source packages intact.
|
||||
@@ -214,12 +214,12 @@ def fragment_latex_header(source_path=None):
|
||||
preamble = re.sub(r'\\usepackage\s*(\[[^\]]*\])?\s*\{([^}]+)\}',
|
||||
without_geometry, preamble)
|
||||
preamble = re.sub(r'\\(?:geometry|newgeometry)\s*\{[^}]*\}', '', preamble)
|
||||
return preamble + LATEX_BEFORE[configured_begin.start():]
|
||||
return preamble + configuration.LATEX_BEFORE[configured_begin.start():]
|
||||
|
||||
|
||||
def compile_to_pdf(text, output_pdf_path, *, strict=False, source_path=None):
|
||||
"""Wraps text in standalone header/footer templates and compiles it to PDF."""
|
||||
latex_template = f"{fragment_latex_header(source_path)}{text}{LATEX_AFTER}"
|
||||
latex_template = f"{fragment_latex_header(source_path)}{text}{configuration.LATEX_AFTER}"
|
||||
env = os.environ.copy()
|
||||
if source_path is not None:
|
||||
source_dir = str(Path(source_path).resolve().parent)
|
||||
|
||||
Reference in new issue
Block a user