diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py index 591b965c8d..6e3da4bbf4 100644 --- a/src/calibre/library/catalogs/epub_mobi_builder.py +++ b/src/calibre/library/catalogs/epub_mobi_builder.py @@ -1364,28 +1364,19 @@ class CatalogBuilder: else: return None - def format_prefix(self, prefix_char): + def insert_prefix(self, soup, parent_tag, pos, prefix_char): """ Generate HTML snippet with prefix character. - Return a snippet for Kindle, snippet for EPUB. + Insert a snippet for Kindle, snippet for EPUB. Optimized to preserve first-column alignment for MOBI, EPUB. - - Args: - prefix_char (str): prefix character or None - - Return: - (str): BeautifulSoup HTML snippet to be inserted into

line item entry. """ - - prefix_char = prepare_string_for_xml(prefix_char or NBSP) if self.opts.fmt == 'mobi': - tagname = 'code' - html = f'<{tagname}>{prefix_char}' + tag = soup.new_tag('code') else: - tagname = 'span' - html = f'<{tagname} class="prefix">{prefix_char}' - soup = BeautifulSoup(html) - return soup.find(tagname) + tag = soup.new_tag('span') + tag['class'] = 'prefix' + tag.append(prefix_char or NBSP) + parent_tag.insert(pos, tag) def generate_author_anchor(self, author): """ Generate legal XHTML anchor. @@ -1566,7 +1557,7 @@ class CatalogBuilder: pBookTag['class'] = "line_item" ptc = 0 - pBookTag.insert(ptc, self.format_prefix(book['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, book['prefix']) ptc += 1 spanTag = soup.new_tag("span") @@ -1717,7 +1708,7 @@ class CatalogBuilder: pBookTag['class'] = "line_item" ptc = 0 - pBookTag.insert(ptc, self.format_prefix(new_entry['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, new_entry['prefix']) ptc += 1 spanTag = soup.new_tag("span") @@ -1769,7 +1760,7 @@ class CatalogBuilder: pBookTag['class'] = "line_item" ptc = 0 - pBookTag.insert(ptc, self.format_prefix(new_entry['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, new_entry['prefix']) ptc += 1 spanTag = soup.new_tag("span") @@ -2285,7 +2276,7 @@ class CatalogBuilder: pBookTag['class'] = "line_item" ptc = 0 - pBookTag.insert(ptc, self.format_prefix(book['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, book['prefix']) ptc += 1 spanTag = soup.new_tag("span") @@ -2418,7 +2409,7 @@ class CatalogBuilder: ptc = 0 book['prefix'] = self.discover_prefix(book) - pBookTag.insert(ptc, self.format_prefix(book['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, book['prefix']) ptc += 1 spanTag = soup.new_tag("span") @@ -2577,7 +2568,7 @@ class CatalogBuilder: pBookTag['class'] = "line_item" ptc = 0 - pBookTag.insert(ptc, self.format_prefix(book['prefix'])) + self.insert_prefix(soup, pBookTag, ptc, book['prefix']) ptc += 1 spanTag = soup.new_tag("span")