mirror of
https://github.com/gryf/ebook-converter.git
synced 2026-03-18 15:53:41 +01:00
Replace Calibre path resolve system for some of the modules.
In Calibre there is a module, which registers two functions in global scope, one for filepath and one for images path. It relies on additional three variables, registered during application startup. I found it overcomplicated, and couple of the resource paths has been calculated using pkg_resource module.
This commit is contained in:
@@ -4,6 +4,7 @@ __copyright__ = '2008, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys, os, re, time, random, warnings
|
import sys, os, re, time, random, warnings
|
||||||
|
import pkg_resources
|
||||||
from ebook_converter.polyglot.builtins import codepoint_to_chr, unicode_type, range, hasenv, native_string_type
|
from ebook_converter.polyglot.builtins import codepoint_to_chr, unicode_type, range, hasenv, native_string_type
|
||||||
from math import floor
|
from math import floor
|
||||||
from functools import partial
|
from functools import partial
|
||||||
@@ -34,7 +35,8 @@ _mt_inited = False
|
|||||||
def _init_mimetypes():
|
def _init_mimetypes():
|
||||||
global _mt_inited
|
global _mt_inited
|
||||||
import mimetypes
|
import mimetypes
|
||||||
mimetypes.init([P('mime.types')])
|
mimetypes.init([pkg_resources.resource_filename('ebook_converter',
|
||||||
|
'data/mime.types')])
|
||||||
_mt_inited = True
|
_mt_inited = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||||
|
|
||||||
import os, glob, re, textwrap
|
import os, glob, re, textwrap
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
from ebook_converter.customize.conversion import InputFormatPlugin, OptionRecommendation
|
from ebook_converter.customize.conversion import InputFormatPlugin, OptionRecommendation
|
||||||
from ebook_converter.polyglot.builtins import iteritems, filter, getcwd, as_bytes
|
from ebook_converter.polyglot.builtins import iteritems, filter, getcwd, as_bytes
|
||||||
@@ -282,7 +283,9 @@ class RTFInput(InputFormatPlugin):
|
|||||||
|
|
||||||
self.log('Converting XML to HTML...')
|
self.log('Converting XML to HTML...')
|
||||||
inline_class = InlineClass(self.log)
|
inline_class = InlineClass(self.log)
|
||||||
styledoc = safe_xml_fromstring(P('templates/rtf.xsl', data=True), recover=False)
|
with open(pkg_resources.resource_filename('ebook_converter',
|
||||||
|
'data/rtf.xsl')) as fobj:
|
||||||
|
styledoc = safe_xml_fromstring(fobj.read())
|
||||||
extensions = {('calibre', 'inline-class') : inline_class}
|
extensions = {('calibre', 'inline-class') : inline_class}
|
||||||
transform = etree.XSLT(styledoc, extensions=extensions)
|
transform = etree.XSLT(styledoc, extensions=extensions)
|
||||||
result = transform(doc)
|
result = transform(doc)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2008, Marshall T. Vandegrift <llasram@gmail.com>'
|
__copyright__ = '2008, Marshall T. Vandegrift <llasram@gmail.com>'
|
||||||
|
|
||||||
import os, re, logging, copy, unicodedata, numbers
|
import os, re, logging, copy, unicodedata, numbers
|
||||||
|
import pkg_resources
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from weakref import WeakKeyDictionary
|
from weakref import WeakKeyDictionary
|
||||||
from xml.dom import SyntaxErr as CSSSyntaxError
|
from xml.dom import SyntaxErr as CSSSyntaxError
|
||||||
@@ -32,7 +33,8 @@ _html_css_stylesheet = None
|
|||||||
def html_css_stylesheet():
|
def html_css_stylesheet():
|
||||||
global _html_css_stylesheet
|
global _html_css_stylesheet
|
||||||
if _html_css_stylesheet is None:
|
if _html_css_stylesheet is None:
|
||||||
with open(P('templates/html.css'), 'rb') as f:
|
with open(pkg_resources.resource_filename('ebook_converter',
|
||||||
|
'data/html.css'), 'rb') as f:
|
||||||
html_css = f.read().decode('utf-8')
|
html_css = f.read().decode('utf-8')
|
||||||
_html_css_stylesheet = parseString(html_css, validate=False)
|
_html_css_stylesheet = parseString(html_css, validate=False)
|
||||||
return _html_css_stylesheet
|
return _html_css_stylesheet
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, locale, re, io, sys
|
import os, locale, re, io, sys
|
||||||
|
import json
|
||||||
from gettext import GNUTranslations, NullTranslations
|
from gettext import GNUTranslations, NullTranslations
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
from ebook_converter.polyglot.builtins import is_py3, iteritems, unicode_type
|
from ebook_converter.polyglot.builtins import is_py3, iteritems, unicode_type
|
||||||
|
|
||||||
@@ -361,12 +363,53 @@ for k in _extra_lang_codes:
|
|||||||
|
|
||||||
def _load_iso639():
|
def _load_iso639():
|
||||||
global _iso639
|
global _iso639
|
||||||
|
|
||||||
|
# NOTE(gryf): msgpacked data was originally added for speed purposes. In
|
||||||
|
# my tests, I cannot see any speed gain either on python2 or python3. It
|
||||||
|
# is even slower (around 4-8 times), than just using code below (which is
|
||||||
|
# excerpt form Calibre transform code which is executed during Calibre
|
||||||
|
# build).
|
||||||
if _iso639 is None:
|
if _iso639 is None:
|
||||||
ip = P('localization/iso639.calibre_msgpack', allow_user_override=False, data=True)
|
src = pkg_resources.resource_filename('ebook_converter',
|
||||||
from ebook_converter.utils.serialize import msgpack_loads
|
'data/iso_639-3.json')
|
||||||
_iso639 = msgpack_loads(ip)
|
|
||||||
if 'by_3' not in _iso639:
|
with open(src, 'rb') as f:
|
||||||
_iso639['by_3'] = _iso639['by_3t']
|
root = json.load(f)
|
||||||
|
|
||||||
|
entries = root['639-3']
|
||||||
|
by_2 = {}
|
||||||
|
by_3 = {}
|
||||||
|
m2to3 = {}
|
||||||
|
m3to2 = {}
|
||||||
|
nm = {}
|
||||||
|
codes2, codes3 = set(), set()
|
||||||
|
for x in entries:
|
||||||
|
two = x.get('alpha_2')
|
||||||
|
threeb = x.get('alpha_3')
|
||||||
|
if threeb is None:
|
||||||
|
continue
|
||||||
|
name = x.get('inverted_name') or x.get('name')
|
||||||
|
if not name or name[0] in '!~=/\'"':
|
||||||
|
continue
|
||||||
|
|
||||||
|
if two is not None:
|
||||||
|
by_2[two] = name
|
||||||
|
codes2.add(two)
|
||||||
|
m2to3[two] = threeb
|
||||||
|
m3to2[threeb] = two
|
||||||
|
codes3.add(threeb)
|
||||||
|
by_3[threeb] = name
|
||||||
|
base_name = name.lower()
|
||||||
|
nm[base_name] = threeb
|
||||||
|
|
||||||
|
_iso639 = {'by_2': by_2,
|
||||||
|
'by_3': by_3,
|
||||||
|
'codes2': codes2,
|
||||||
|
'codes3': codes3,
|
||||||
|
'2to3': m2to3,
|
||||||
|
'3to2': m3to2,
|
||||||
|
'name_map': nm}
|
||||||
|
|
||||||
return _iso639
|
return _iso639
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user