mirror of
https://github.com/gryf/ebook-converter.git
synced 2026-04-05 04:13:33 +02:00
This is progressing refactor of the calibre code to make it more readable, and transform it to something more coherent. In this patch, there are changes regarding imports for some modules, instead of polluting namespace of each module with some other modules symbols, which often were imported from other modules. Yuck.
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from lxml import etree
|
|
|
|
from ebook_converter import constants as const
|
|
from ebook_converter.utils.localization import canonicalize_lang
|
|
|
|
|
|
def get_book_language(container):
|
|
for lang in container.opf_xpath('//dc:language'):
|
|
raw = lang.text
|
|
if raw:
|
|
code = canonicalize_lang(raw.split(',')[0].strip())
|
|
if code:
|
|
return code
|
|
|
|
|
|
def set_guide_item(container, item_type, title, name, frag=None):
|
|
ref_tag = const.OPF_REFERENCE
|
|
href = None
|
|
if name:
|
|
href = container.name_to_href(name, container.opf_name)
|
|
if frag:
|
|
href += '#' + frag
|
|
|
|
guides = container.opf_xpath('//opf:guide')
|
|
if not guides and href:
|
|
g = container.opf.makeelement(const.OPF_GUIDE,
|
|
nsmap={'opf': const.OPF2_NS})
|
|
container.insert_into_xml(container.opf, g)
|
|
guides = [g]
|
|
|
|
for guide in guides:
|
|
matches = []
|
|
for child in guide.iterchildren(etree.Element):
|
|
if (child.tag == ref_tag and
|
|
child.get('type', '').lower() == item_type.lower()):
|
|
matches.append(child)
|
|
if not matches and href:
|
|
r = guide.makeelement(ref_tag, type=item_type,
|
|
nsmap={'opf': const.OPF2_NS})
|
|
container.insert_into_xml(guide, r)
|
|
matches.append(r)
|
|
for m in matches:
|
|
if href:
|
|
m.set('title', title)
|
|
m.set('href', href)
|
|
m.set('type', item_type)
|
|
else:
|
|
container.remove_from_xml(m)
|
|
container.dirty(container.opf_name)
|