. Oder und mehr.\n"
)
# --- Markdown-Sonderzeichen --------------------------------------------------------
@pytest.mark.parametrize("text, escaped", [
("__add__", "\\_\\_add\\_\\_"),
("snake_case", "snake_case"),
("a*b [1] $5 x^2 ~x", "a\\*b \\[1\\] \\
\\$5 x\\^2 \\~x"),
])
def test_md_escape_round_trip(text, escaped):
assert p.md_escape(text) == escaped
assert p.md_unescape(escaped) == text
def test_pymupdf4llm_patch_escapes_text_but_not_code():
spans = [
{"text": "__add__ und *", "flags": 0, "char_flags": 16, "font": "x", "block": 0, "line": 0},
{"text": "a_b*c", "flags": 8, "char_flags": int(p.VISIBLE_TEXT), "font": "Courier",
"block": 0, "line": 0},
]
output, _ = p.document_layout.get_styled_text(spans)
assert output.strip() == "\\_\\_add\\_\\_ und \\* `a_b*c`"
def test_escaped_text_survives_link_steps():
md = "\\_\\_add\\_\\_, 180\\\nSiehe https://a.de/Leitlinien\\_ x.\n"
out = p.link_anchors(p.link_urls(md, ["https://a.de/Leitlinien_x"]), [])
assert out.startswith("\\_\\_add\\_\\_, 180\\\n")
assert "" in out
# --- Zahlen als Überschrift --------------------------------------------------------
def test_number_heading_without_title_is_dropped():
md = "# Private Stiftungen\n\n## 90\n\nText.\n\n## XXIV\n\nMehr.\n"
assert norm(md) == "# Private Stiftungen\n\nText.\n\nMehr.\n"
def test_number_heading_kept_before_title_or_with_dot_or_in_outline():
md = "## 1\n\n## Wenn Ostdeutsche fragen\n\nText.\n\n## IV.\n\nMehr.\n\n## 7\n\nNoch.\n"
assert norm(md, {"7": 2}) == md
def test_register_letters_stay_headings():
md = "## C\n\ncalendar, 266\n\n## D\n\ndata stream, 249\n\n## I\n\nif, 105\n"
assert norm(md) == md
def test_number_heading_kept_as_text_when_page_numbers_kept():
assert norm("## 90\n\nText.\n", drop_page_numbers=False) == "90\n\nText.\n"