def extract_cover_from_embedded_svg(html, base, log): from lxml import etree from calibre.ebooks.oeb.base import XPath, SVG, XLINK root = etree.fromstring(html) svg = XPath('//svg:svg')(root) if len(svg) == 1 and len(svg[0]) == 1 and svg[0][0].tag == SVG('image'): image = svg[0][0] href = image.get(XLINK('href'), None) path = os.path.join(base, *href.split('/')) if href and os.access(path, os.R_OK): return open(path, 'rb').read()
def extract_cover_from_embedded_svg(html, base, log): from calibre.ebooks.oeb.base import XPath, SVG, XLINK from calibre.utils.xml_parse import safe_xml_fromstring root = safe_xml_fromstring(html) svg = XPath('//svg:svg')(root) if len(svg) == 1 and len(svg[0]) == 1 and svg[0][0].tag == SVG('image'): image = svg[0][0] href = image.get(XLINK('href'), None) if href: path = os.path.join(base, *href.split('/')) return return_raster_image(path)
if cat == 0: i = spine_ids.get(x.get('id', None), 1000000000) else: i = sort_key(href) return (cat, i) for manifest in root.xpath('//opf:manifest', namespaces=OPF_NAMESPACES): try: children = sorted(manifest, key=manifest_key) except AttributeError: continue # There are comments so dont sort since that would mess up the comments for x in reversed(children): manifest.insert(0, x) SVG_TAG = SVG('svg') BLOCK_TAGS = frozenset( map(XHTML, ('address', 'article', 'aside', 'audio', 'blockquote', 'body', 'canvas', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'noscript', 'ol', 'output', 'p', 'pre', 'script', 'section', 'style', 'table', 'tbody', 'td', 'tfoot', 'thead', 'tr', 'ul', 'video', 'img'))) | {SVG_TAG} def isblock(x): if callable(x.tag) or not x.tag: return True if x.tag in BLOCK_TAGS: