diff --git a/CHANGELOG.md b/CHANGELOG.md index 63f0e21..13b2530 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,10 @@ Versionsnummern nach [Semantic Versioning](https://semver.org/lang/de/). ### Behoben +- CSS-Auswertung: Es zählen nur noch Stylesheets, die ein Dokument per `` (oder `@import`) einbindet. + Bisher wirkten alle CSS-Dateien des Manifests, auch mitgelieferte Layouts anderer Buchreihen. Im C-Buch + machte das aus fetten Buchstaben Inline-Code (`` `st`an`d`ard ``) und setzte falsche ``; eine + fremde `display:none`-Regel hätte Text gelöscht (QA3-01, Regressionstests in `tests/test_styles.py`). - `pandoc/callouts.lua`: Die Kästen blieben ohne Rahmen, wenn man Pandoc zusätzlich `-H`/`--include-in-header` übergab, und im EPUB hatten nur die Titelseite, nicht die Kapitel, das Kasten-CSS. Das CSS steht jetzt in `pandoc/callouts.css`; der Filter setzt es bei HTML an den Anfang des Dokuments und fügt es bei EPUB den diff --git a/README.md b/README.md index 3e07c04..b5ea70c 100644 --- a/README.md +++ b/README.md @@ -249,6 +249,8 @@ weil CommonMark keine `[^…]`-Syntax kennt. - **CSS-Formatierung:** Viele Verlage setzen Hervorhebungen nur über Stylesheets. epub2md wertet die CSS-Dateien des Buches aus: Klassen-, Element- und ID-Selektoren, Nachfahren- und Kind-Kombinatoren, Spezifität und `style`-Attribute. `@media`-Blöcke und Selektoren mit Pseudoklassen werden ignoriert. + Berücksichtigt werden nur Stylesheets, die ein Dokument per `` (oder `@import`) einbindet; + mitgelieferte Layouts anderer Buchreihen bleiben wie im E-Book-Reader wirkungslos (Info `css-unlinked`). Direkt aneinanderstoßende gleiche Hervorhebungen werden zusammengefasst (`*x**y*` → `*xy*`). - **Farben und Schriften:** Markdown kennt keine Farben, Schriftarten oder -größen. Mit `--styles html` bleiben sie als HTML-Stil erhalten. Übernommen wird nur, was vom Grundstil abweicht (häufigste Werte aller diff --git a/epub2md/html_converter.py b/epub2md/html_converter.py index 5ce4bb9..15ff259 100644 --- a/epub2md/html_converter.py +++ b/epub2md/html_converter.py @@ -1233,8 +1233,8 @@ class Renderer: finally: self.strong -= 1 if name in ("del", "s", "strike"): - marker = ("~~", "~~") if self.opt.format == "gfm" else ("", "") - return pre + self._wrap(self.inline_children(el), marker[0], marker[1]) + del_open, del_close = ("~~", "~~") if self.opt.format == "gfm" else ("", "") + return pre + self._wrap(self.inline_children(el), del_open, del_close) if name in ("u", "ins", "mark", "kbd", "sup", "sub"): if name in ("sup", "sub"): elems = [c for c in el if is_element(c)] diff --git a/epub2md/pipeline.py b/epub2md/pipeline.py index bc10e24..9f1f68e 100644 --- a/epub2md/pipeline.py +++ b/epub2md/pipeline.py @@ -13,6 +13,7 @@ from dataclasses import asdict, dataclass, field from datetime import datetime, timezone from pathlib import Path from typing import Any +from urllib.parse import unquote from . import TOOL_NAME, __version__ from .chapters import ChapterBuilder @@ -27,7 +28,7 @@ from .media import MediaRegistry from .models import Chapter from .normalize import Doc, book_uses_title_tables, is_html_toc_doc, make_doc, normalize_doc, remove_keep_tail from .references import LinkResolver -from .utils import is_element, is_inside, iter_elements, local, sha256_file, slugify, text_content +from .utils import is_element, is_inside, iter_elements, local, resolve_href, sha256_file, slugify, text_content from . import writer MARKER_FILES = ("conversion-report.json", "manifest.json") @@ -233,18 +234,39 @@ def _build_structure(docs: list[Doc], package: Any, opts: Options, return notes, chapters, resolver +CSS_IMPORT = re.compile(r"""@import\s+(?:url\(\s*)?["']?([^"')\s;]+)""", re.I) + + def _load_stylesheet(reader: EpubReader, package: Any, docs: list[Doc], diag: Diagnostics) -> StyleSheet: - """All CSS of the book: manifest stylesheets (manifest order) plus