From cf5755f6a26e55285e95d382385b23f7fc729cd4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 3 May 2016 10:20:29 +0530 Subject: [PATCH] Use a forked MathJax, makes it easier to maintain the patch --- setup/mathjax.py | 61 +++++++++++++---------------------- src/pyj/read_book/mathjax.pyj | 2 ++ 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/setup/mathjax.py b/setup/mathjax.py index 1d939acdda..f3783f107d 100644 --- a/setup/mathjax.py +++ b/setup/mathjax.py @@ -7,7 +7,7 @@ __license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, re +import os from urllib import urlretrieve from zipfile import ZipFile, ZIP_STORED, ZipInfo from hashlib import sha1 @@ -19,38 +19,22 @@ from setup import Command class MathJax(Command): description = 'Create the MathJax bundle' - MATH_JAX_VERSION = '2.6.1' - MATH_JAX_URL = 'https://github.com/mathjax/MathJax/archive/%s.zip' % MATH_JAX_VERSION + MATH_JAX_URL = 'https://github.com/kovidgoyal/MathJax/archive/master.zip' FONT_FAMILY = 'TeX' def add_options(self, parser): parser.add_option('--path-to-mathjax', help='Path to the MathJax source code') - def download_mathjax_release(self): - from calibre.ptempfile import TemporaryDirectory + def download_mathjax_release(self, tdir): self.info('Downloading MathJax:', self.MATH_JAX_URL) filename = urlretrieve(self.MATH_JAX_URL)[0] - with ZipFile(filename) as zf, TemporaryDirectory() as tdir: + with ZipFile(filename) as zf: zf.extractall(tdir) - for d in os.listdir(tdir): - q = os.path.join(tdir, d) - if os.path.isdir(q): - return q - - def patch_webfonts(self, raw): - raw = raw.decode('utf-8') - nraw = re.sub(r'font = {[^}]+WOFFDIR[^}]+}', - '''font = {'font-family':family+'w', src:'url(' + AJAX.fileURL(WOFFDIR+'/'+name+'-'+variant+'.woff') + ') format("woff")'}''', raw) - if raw == nraw: - raise SystemExit('Patching of webfonts failed') - return nraw.encode('utf-8') + return os.path.join(tdir, 'MathJax-master') def add_file(self, zf, path, name): with open(path, 'rb') as f: raw = f.read() - if name == 'jax/output/CommonHTML/fonts/TeX/fontdata.js': - raw = self.patch_webfonts(raw) - self.patched = True self.h.update(raw) zi = ZipInfo(name) zi.external_attr = 0o444 << 16L @@ -67,23 +51,22 @@ class MathJax(Command): return '/fonts/' in name and self.FONT_FAMILY not in name def run(self, opts): - self.patched = False + from calibre.ptempfile import TemporaryDirectory self.h = sha1() - src = opts.path_to_mathjax or self.download_mathjax_release() - self.info('Compressing MathJax...') - from calibre.ptempfile import SpooledTemporaryFile - t = SpooledTemporaryFile() - with ZipFile(t, 'w', ZIP_STORED) as zf: - self.add_file(zf, self.j(src, 'unpacked', 'MathJax.js'), 'MathJax.js') - self.add_tree(zf, self.j(src, 'fonts', 'HTML-CSS', self.FONT_FAMILY, 'woff'), 'fonts/HTML-CSS/%s/woff' % self.FONT_FAMILY) - for d in 'extensions jax/element jax/input jax/output/CommonHTML'.split(): - self.add_tree(zf, self.j(src, 'unpacked', *d.split('/')), d) + with TemporaryDirectory() as tdir: + src = opts.path_to_mathjax or self.download_mathjax_release(tdir) + self.info('Compressing MathJax...') + from calibre.ptempfile import SpooledTemporaryFile + t = SpooledTemporaryFile() + with ZipFile(t, 'w', ZIP_STORED) as zf: + self.add_file(zf, self.j(src, 'unpacked', 'MathJax.js'), 'MathJax.js') + self.add_tree(zf, self.j(src, 'fonts', 'HTML-CSS', self.FONT_FAMILY, 'woff'), 'fonts/HTML-CSS/%s/woff' % self.FONT_FAMILY) + for d in 'extensions jax/element jax/input jax/output/CommonHTML'.split(): + self.add_tree(zf, self.j(src, 'unpacked', *d.split('/')), d) - zf.comment = self.h.hexdigest() - t.seek(0) - if not self.patched: - raise SystemExit('Could not find fontdata.js to patch') - with open(self.j(self.RESOURCES, 'content-server', 'mathjax.zip.xz'), 'wb') as f: - compress(t, f, level=9) - with open(self.j(self.RESOURCES, 'content-server', 'mathjax.version'), 'wb') as f: - f.write(zf.comment) + zf.comment = self.h.hexdigest() + t.seek(0) + with open(self.j(self.RESOURCES, 'content-server', 'mathjax.zip.xz'), 'wb') as f: + compress(t, f, level=9) + with open(self.j(self.RESOURCES, 'content-server', 'mathjax.version'), 'wb') as f: + f.write(zf.comment) diff --git a/src/pyj/read_book/mathjax.pyj b/src/pyj/read_book/mathjax.pyj index ed68fd45d5..b5726bf504 100644 --- a/src/pyj/read_book/mathjax.pyj +++ b/src/pyj/read_book/mathjax.pyj @@ -23,6 +23,8 @@ def monkeypatch(mathjax_files): return name ans = get_url(mathjax_files, name) if ans is name and not name.startswith('blob:'): + if ans.endswith('.eot') or ans.endswith('.otf'): + return '' print('WARNING: Failed to resolve MathJax file:', name) return ans window.MathJax.Ajax.fileURL = file_url