feat: Option --code-language für Codeblöcke ohne erkannte Sprache
Weist Blöcken ohne erkannte Sprache ein vom Nutzer gewähltes Label zu. Aliase wie py werden normalisiert, unbekannte Werte ergeben Exit 1. Erkannte Labels haben Vorrang; im Bericht detected_by "option" (QA-Befund R1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
8afa1cc6d4
commit
cc36372329
1 changed files with 39 additions and 2 deletions
|
|
@ -9,6 +9,7 @@ from pathlib import Path
|
|||
from typing import NoReturn
|
||||
|
||||
from . import __version__
|
||||
from .codeblocks import LANG_ALIASES
|
||||
from .errors import EXIT_INPUT, EXIT_INTERNAL, Epub2MdError
|
||||
from .pipeline import Options, convert, print_summary
|
||||
|
||||
|
|
@ -37,6 +38,14 @@ class _Parser(argparse.ArgumentParser):
|
|||
sys.exit(EXIT_INPUT)
|
||||
|
||||
|
||||
def code_language(value: str) -> str:
|
||||
lang = LANG_ALIASES.get(value.strip().lower())
|
||||
if lang is None:
|
||||
known = ", ".join(sorted(set(LANG_ALIASES.values())))
|
||||
raise argparse.ArgumentTypeError(f"unbekannte Sprache {value!r} (bekannt: {known})")
|
||||
return lang
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
p = _Parser(
|
||||
prog="epub2md.py",
|
||||
|
|
@ -70,6 +79,9 @@ def build_parser() -> argparse.ArgumentParser:
|
|||
help="Dateinamen-Regeln: de (ä→ae), en (ä→a), none (Unicode behalten) (Standard: de)")
|
||||
p.add_argument("--keep-html", action="store_true",
|
||||
help="Nicht zuverlässig konvertierbare Elemente als bereinigtes HTML erhalten")
|
||||
p.add_argument("--code-language", type=code_language, default=None, metavar="SPRACHE",
|
||||
help="Sprachlabel für Codeblöcke ohne erkannte Sprache, z. B. python oder c "
|
||||
"(erkannte Labels haben Vorrang; Standard: kein Label)")
|
||||
p.add_argument("--strict", action="store_true",
|
||||
help="Bei kritischen Fehlern (fehlende Spine-Dateien, unsichere Pfade, kaputtes XHTML) abbrechen")
|
||||
p.add_argument("--force", action="store_true",
|
||||
|
|
@ -101,6 +113,7 @@ def main(argv: list[str] | None = None) -> int:
|
|||
images=args.images,
|
||||
slug_language=args.slug_language,
|
||||
keep_html=args.keep_html,
|
||||
code_language=args.code_language or "",
|
||||
strict=args.strict,
|
||||
verbose=args.verbose,
|
||||
dry_run=args.dry_run,
|
||||
|
|
|
|||
Loading…
Reference in a new issue