diff --git a/src/calibre/gui2/viewer/javascript.py b/src/calibre/gui2/viewer/javascript.py index d1b0b47c8a..1bc617d8b9 100644 --- a/src/calibre/gui2/viewer/javascript.py +++ b/src/calibre/gui2/viewer/javascript.py @@ -7,11 +7,10 @@ __license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, zipfile +import os import calibre -from calibre.utils.localization import lang_as_iso639_1 -from calibre.utils.resources import compiled_coffeescript +from calibre.utils.resources import compiled_coffeescript, load_hyphenator_dicts class JavaScriptLoader(object): @@ -67,9 +66,7 @@ class JavaScriptLoader(object): ans = P(src, data=True, allow_user_override=False).decode('utf-8') else: - dynamic = (self._dynamic_coffeescript and - calibre.__file__ and not calibre.__file__.endswith('.pyo') and - os.path.exists(calibre.__file__)) + dynamic = self._dynamic_coffeescript and calibre.__file__ and not calibre.__file__.endswith('.pyo') and os.path.exists(calibre.__file__) ans = compiled_coffeescript(src, dynamic=dynamic).decode('utf-8') self._cache[name] = ans @@ -80,29 +77,6 @@ class JavaScriptLoader(object): src = self.get(x) evaljs(src) - if not lang: - lang = default_lang or 'en' - - def lang_name(l): - l = l.lower() - l = lang_as_iso639_1(l) - if not l: - l = 'en' - l = {'en':'en-us', 'nb':'nb-no', 'el':'el-monoton'}.get(l, l) - return l.lower().replace('_', '-') - - if not self._hp_cache: - with zipfile.ZipFile(P('viewer/hyphenate/patterns.zip', - allow_user_override=False), 'r') as zf: - for pat in zf.namelist(): - raw = zf.read(pat).decode('utf-8') - self._hp_cache[pat.partition('.')[0]] = raw - - if lang_name(lang) not in self._hp_cache: - lang = lang_name(default_lang) - - lang = lang_name(lang) - - evaljs('\n\n'.join(self._hp_cache.itervalues())) - + js, lang = load_hyphenator_dicts(self._hp_cache, lang, default_lang) + evaljs(js) return lang diff --git a/src/calibre/utils/resources.py b/src/calibre/utils/resources.py index 521d07852e..97e53308d7 100644 --- a/src/calibre/utils/resources.py +++ b/src/calibre/utils/resources.py @@ -64,6 +64,7 @@ class PathResolver(object): return ans + _resolver = PathResolver() @@ -117,5 +118,36 @@ def compiled_coffeescript(name, dynamic=False): else: return zf.read(name+'.js') + +def load_hyphenator_dicts(hp_cache, lang, default_lang='en'): + from calibre.utils.localization import lang_as_iso639_1 + import zipfile + if not lang: + lang = default_lang or 'en' + + def lang_name(l): + l = l.lower() + l = lang_as_iso639_1(l) + if not l: + l = 'en' + l = {'en':'en-us', 'nb':'nb-no', 'el':'el-monoton'}.get(l, l) + return l.lower().replace('_', '-') + + if not hp_cache: + with zipfile.ZipFile(P('viewer/hyphenate/patterns.zip', + allow_user_override=False), 'r') as zf: + for pat in zf.namelist(): + raw = zf.read(pat).decode('utf-8') + hp_cache[pat.partition('.')[0]] = raw + + if lang_name(lang) not in hp_cache: + lang = lang_name(default_lang) + + lang = lang_name(lang) + + js = '\n\n'.join(hp_cache.itervalues()) + return js, lang + + __builtin__.__dict__['P'] = get_path __builtin__.__dict__['I'] = get_image_path