From 0d4674f1b28ff9cb9a70ac5854d6749860ff715c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 27 Sep 2022 12:40:33 +0530 Subject: [PATCH] Font subsetting: Fix :first-line and :first-letter pseudo classes not being handled correctly. Fixes #1990766 [Font subsetting problem with CSS pseudo classes](https://bugs.launchpad.net/calibre/+bug/1990766) --- src/calibre/ebooks/oeb/polish/stats.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/ebooks/oeb/polish/stats.py b/src/calibre/ebooks/oeb/polish/stats.py index 54d062c850..18fd558a98 100644 --- a/src/calibre/ebooks/oeb/polish/stats.py +++ b/src/calibre/ebooks/oeb/polish/stats.py @@ -184,7 +184,7 @@ class StatsCollector: def __init__(self, container, do_embed=False): if self.first_letter_pat is None: StatsCollector.first_letter_pat = self.first_letter_pat = regex.compile( - r'^[\p{Ps}\p{Ps}\p{Pe}\p{Pi}\p{Pf}\p{Po}]+', regex.VERSION1 | regex.UNICODE) + r'^[\p{P}]*[\p{L}\p{N}]', regex.VERSION1 | regex.UNICODE) StatsCollector.capitalize_pat = self.capitalize_pat = regex.compile( r'[\p{L}\p{N}]', regex.VERSION1 | regex.UNICODE) @@ -261,7 +261,7 @@ class StatsCollector: self.font_stats[rule['src']] |= chars q = resolve_pseudo_property(elem, 'first-line', 'font-family', abort_on_missing=True) if q is not None: - font = get_font_dict(elem, resolve_pseudo_property, pseudo='first-letter') + font = get_font_dict(elem, resolve_pseudo_property, pseudo='first-line') text = get_element_text(elem, resolve_property, resolve_pseudo_property, self.capitalize_pat, for_pseudo='first-line') chars = frozenset(ord_string(text)) - exclude_chars update_usage_for_embed(font, chars)