1#!/usr/local/bin/python3.8 2# vim:fileencoding=utf-8 3 4 5__license__ = 'GPL v3' 6__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>' 7 8from qt.core import QTextCharFormat, QTextFormat 9 10from calibre.ebooks.oeb.base import OEB_DOCS, OEB_STYLES 11from calibre.ebooks.oeb.polish.container import guess_type 12 13_xml_types = {'application/oebps-page-map+xml', 'application/vnd.adobe-page-template+xml', 'application/page-template+xml'} | { 14 guess_type('a.'+x) for x in ('ncx', 'opf', 'svg', 'xpgt', 'xml')} 15_js_types = {'application/javascript', 'application/x-javascript'} 16 17 18def syntax_from_mime(name, mime): 19 for syntax, types in (('html', OEB_DOCS), ('css', OEB_STYLES), ('xml', _xml_types)): 20 if mime in types: 21 return syntax 22 if mime in _js_types: 23 return 'javascript' 24 if mime.startswith('text/'): 25 return 'text' 26 if mime.startswith('image/') and mime.partition('/')[-1].lower() in { 27 'jpeg', 'jpg', 'gif', 'png', 'webp'}: 28 return 'raster_image' 29 if mime.endswith('+xml'): 30 return 'xml' 31 32 33all_text_syntaxes = frozenset({'text', 'html', 'xml', 'css', 'javascript'}) 34 35 36def editor_from_syntax(syntax, parent=None): 37 if syntax in all_text_syntaxes: 38 from calibre.gui2.tweak_book.editor.widget import Editor 39 return Editor(syntax, parent=parent) 40 elif syntax == 'raster_image': 41 from calibre.gui2.tweak_book.editor.image import Editor 42 return Editor(syntax, parent=parent) 43 44 45SYNTAX_PROPERTY = QTextFormat.Property.UserProperty 46SPELL_PROPERTY = SYNTAX_PROPERTY + 1 47SPELL_LOCALE_PROPERTY = SPELL_PROPERTY + 1 48LINK_PROPERTY = SPELL_LOCALE_PROPERTY + 1 49TAG_NAME_PROPERTY = LINK_PROPERTY + 1 50CSS_PROPERTY = TAG_NAME_PROPERTY + 1 51CLASS_ATTRIBUTE_PROPERTY = CSS_PROPERTY + 1 52 53 54def syntax_text_char_format(*args): 55 ans = QTextCharFormat(*args) 56 ans.setProperty(SYNTAX_PROPERTY, True) 57 return ans 58 59 60class StoreLocale: 61 62 __slots__ = ('enabled',) 63 64 def __init__(self): 65 self.enabled = False 66 67 def __enter__(self): 68 self.enabled = True 69 70 def __exit__(self, *args): 71 self.enabled = False 72 73 74store_locale = StoreLocale() 75