mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Get rid of the epub: namespace when rendering books
This commit is contained in:
parent
3d22d93966
commit
38918988c2
@ -6,7 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import,
|
|||||||
print_function)
|
print_function)
|
||||||
import sys, os, json
|
import sys, os, json
|
||||||
from base64 import standard_b64encode, standard_b64decode
|
from base64 import standard_b64encode, standard_b64decode
|
||||||
from collections import defaultdict
|
from collections import defaultdict, OrderedDict
|
||||||
from itertools import count
|
from itertools import count
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from future_builtins import map
|
from future_builtins import map
|
||||||
@ -15,7 +15,7 @@ from urlparse import urlparse
|
|||||||
from cssutils import replaceUrls
|
from cssutils import replaceUrls
|
||||||
|
|
||||||
from calibre.ebooks.oeb.base import (
|
from calibre.ebooks.oeb.base import (
|
||||||
OEB_DOCS, OEB_STYLES, rewrite_links, XPath, urlunquote, XLINK, XHTML_NS, OPF, XHTML)
|
OEB_DOCS, OEB_STYLES, rewrite_links, XPath, urlunquote, XLINK, XHTML_NS, OPF, XHTML, EPUB_NS)
|
||||||
from calibre.ebooks.oeb.iterator.book import extract_book
|
from calibre.ebooks.oeb.iterator.book import extract_book
|
||||||
from calibre.ebooks.oeb.polish.container import Container as ContainerBase
|
from calibre.ebooks.oeb.polish.container import Container as ContainerBase
|
||||||
from calibre.ebooks.oeb.polish.cover import set_epub_cover, find_cover_image
|
from calibre.ebooks.oeb.polish.cover import set_epub_cover, find_cover_image
|
||||||
@ -186,9 +186,41 @@ def split_name(name):
|
|||||||
|
|
||||||
boolean_attributes = frozenset('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible'.split(',')) # noqa
|
boolean_attributes = frozenset('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible'.split(',')) # noqa
|
||||||
|
|
||||||
|
EPUB_TYPE_MAP = {k:'doc-' + k for k in (
|
||||||
|
'abstract acknowledgements afterword appendix biblioentry bibliography biblioref chapter colophon conclusion cover credit'
|
||||||
|
' credits dedication epigraph epilogue errata footnote footnotes forward glossary glossref index introduction noteref notice'
|
||||||
|
' pagebreak pagelist part preface prologue pullquote qna locator subtitle title toc').split(' ')}
|
||||||
|
for k in 'figure term definition directory list list-item table row cell'.split(' '):
|
||||||
|
EPUB_TYPE_MAP[k] = k
|
||||||
|
|
||||||
|
EPUB_TYPE_MAP['help'] = 'doc-tip'
|
||||||
|
|
||||||
|
def map_epub_type(epub_type, attribs, elem):
|
||||||
|
val = EPUB_TYPE_MAP.get(epub_type.lower())
|
||||||
|
if val:
|
||||||
|
role = None
|
||||||
|
in_attribs = None
|
||||||
|
for i, x in enumerate(attribs):
|
||||||
|
if x[0] == 'role':
|
||||||
|
role = x[1]
|
||||||
|
in_attribs = i
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
role = elem.get('role')
|
||||||
|
roles = OrderedDict([(k, True) for k in role.split()]) if role else OrderedDict()
|
||||||
|
if val not in roles:
|
||||||
|
roles[val] = True
|
||||||
|
role = ' '.join(roles.iterkeys())
|
||||||
|
if in_attribs is None:
|
||||||
|
attribs.append(['role', role])
|
||||||
|
else:
|
||||||
|
attribs[i] = ['role', role]
|
||||||
|
|
||||||
def serialize_elem(elem, nsmap):
|
def serialize_elem(elem, nsmap):
|
||||||
ns, name = split_name(elem.tag)
|
ns, name = split_name(elem.tag)
|
||||||
nl = name.lower()
|
nl = name.lower()
|
||||||
|
if ns == EPUB_NS:
|
||||||
|
ns, name = None, 'epub-' + name
|
||||||
if nl == 'meta':
|
if nl == 'meta':
|
||||||
return # Filter out <meta> tags as they have unknown side-effects
|
return # Filter out <meta> tags as they have unknown side-effects
|
||||||
if name.lower() in {'img', 'script', 'link', 'image', 'style'}:
|
if name.lower() in {'img', 'script', 'link', 'image', 'style'}:
|
||||||
@ -210,6 +242,9 @@ def serialize_elem(elem, nsmap):
|
|||||||
if val and val.lower() in (al, ''):
|
if val and val.lower() in (al, ''):
|
||||||
attribs.append([al, al])
|
attribs.append([al, al])
|
||||||
continue
|
continue
|
||||||
|
if attr_ns == EPUB_NS and al == 'type':
|
||||||
|
map_epub_type(val, attribs, elem)
|
||||||
|
continue
|
||||||
attrib = [aname, val]
|
attrib = [aname, val]
|
||||||
if attr_ns:
|
if attr_ns:
|
||||||
attr_ns = nsmap[attr_ns]
|
attr_ns = nsmap[attr_ns]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user