%PDF- %PDF-
Direktori : /proc/thread-self/root/usr/lib/calibre/calibre/gui2/tweak_book/editor/ |
Current File : //proc/thread-self/root/usr/lib/calibre/calibre/gui2/tweak_book/editor/help.py |
#!/usr/bin/env python3 __license__ = 'GPL v3' __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>' import json from functools import partial from lxml import html from calibre import browser from calibre.ebooks.oeb.polish.container import OEB_DOCS from calibre.ebooks.oeb.polish.utils import guess_type class URLMap: def __init__(self): self.cache = {} def __getitem__(self, key): try: return self.cache[key] except KeyError: try: self.cache[key] = ans = json.loads(P('editor-help/%s.json' % key, data=True)) except OSError: raise KeyError('The mapping %s is not available' % key) return ans _url_map = URLMap() def help_url(item, item_type, doc_name, extra_data=None): url = None url_maps = () item = item.lower() if item_type == 'css_property': url_maps = ('css',) else: mt = guess_type(doc_name) if mt in OEB_DOCS: url_maps = ('html', 'svg', 'mathml') elif mt == guess_type('a.svg'): url_maps = ('svg',) elif mt == guess_type('a.opf'): version = '3' if getattr(extra_data, 'startswith', lambda x: False)('3') else '2' url_maps = (('opf' + version),) elif mt == guess_type('a.svg'): url_maps = ('svg',) elif mt == guess_type('a.ncx'): url_maps = ('opf2',) for umap in url_maps: umap = _url_map[umap] if item in umap: url = umap[item] break item = item.partition(':')[-1] if item and item in umap: url = umap[item] break return url def get_mdn_tag_index(category): url = 'https://developer.mozilla.org/docs/Web/%s/Element' % category if category == 'CSS': url = url.replace('Element', 'Reference') br = browser() raw = br.open(url).read() root = html.fromstring(raw) ans = {} if category == 'CSS': xpath = '//div[@class="index"]/descendant::a[contains(@href, "/Web/CSS/")]/@href' else: xpath = '//a[contains(@href, "/%s/Element/")]/@href' % category for href in root.xpath(xpath): href = href.replace('/en-US/', '/') ans[href.rpartition('/')[-1].lower()] = 'https://developer.mozilla.org' + href return ans def get_opf2_tag_index(): base = 'http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#' ans = {} for i, tag in enumerate(('package', 'metadata', 'manifest', 'spine', 'tours', 'guide')): ans[tag] = base + 'Section2.%d' % (i + 1) for i, tag in enumerate(( 'title', 'creator', 'subject', 'description', 'publisher', 'contributor', 'date', 'type', 'format', 'identifier', 'source', 'language', 'relation', 'coverage', 'rights')): ans[tag] = base + 'Section2.2.%d' % (i + 1) ans['item'] = ans['manifest'] ans['itemref'] = ans['spine'] ans['reference'] = ans['guide'] for tag in ('ncx', 'docTitle', 'docAuthor', 'navMap', 'navPoint', 'navLabel', 'text', 'content', 'pageList', 'pageTarget'): ans[tag.lower()] = base + 'Section2.4.1.2' return ans def get_opf3_tag_index(): base = 'http://www.idpf.org/epub/301/spec/epub-publications.html#' ans = {} for tag in ( 'package', 'metadata', 'identifier', 'title', 'language', 'meta', 'link', 'manifest', 'item', 'spine', 'itemref', 'guide', 'bindings', 'mediaType', 'collection'): ans[tag.lower()] = base + 'sec-%s-elem' % tag for tag in ('contributor', 'creator', 'date', 'source', 'type',): ans[tag.lower()] = base + 'sec-opf-dc' + tag return ans def write_tag_help(): base = 'editor-help/%s.json' dump = partial(json.dumps, indent=2, sort_keys=True) for category in ('HTML', 'SVG', 'MathML', 'CSS'): data = get_mdn_tag_index(category) with open(P(base % category.lower()), 'wb') as f: f.write(dump(data)) with open(P(base % 'opf2'), 'wb') as f: f.write(dump(get_opf2_tag_index())) with open(P(base % 'opf3'), 'wb') as f: f.write(dump(get_opf3_tag_index())) if __name__ == '__main__': write_tag_help()