Optimize prefix insertion

This commit is contained in:
Kovid Goyal 2022-03-17 19:13:46 +05:30
parent 3f8c675690
commit 49e45e052e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -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 <code> snippet for Kindle, <span> snippet for EPUB.
Insert a <code> snippet for Kindle, <span> 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 <p> 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}</{tagname}>'
tag = soup.new_tag('code')
else:
tagname = 'span'
html = f'<{tagname} class="prefix">{prefix_char}</{tagname}>'
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")