From c58b546ad7a51ad033039b5ca360cd009111c5ab Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 13 Mar 2015 14:42:24 -0400 Subject: [PATCH] Cache measurements of unknown characters so they don't have to be remeasured later. --- .../output/CommonHTML/fonts/TeX/fontdata.js | 7 ++++ unpacked/jax/output/CommonHTML/jax.js | 34 ++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/unpacked/jax/output/CommonHTML/fonts/TeX/fontdata.js b/unpacked/jax/output/CommonHTML/fonts/TeX/fontdata.js index ef09a3505..5485122d4 100644 --- a/unpacked/jax/output/CommonHTML/fonts/TeX/fontdata.js +++ b/unpacked/jax/output/CommonHTML/fonts/TeX/fontdata.js @@ -69,6 +69,13 @@ "MathJax_Typewriter": "Typewriter/Regular/Main.js", "MathJax_Caligraphic-bold": "Caligraphic/Bold/Main.js" }, + + UNKNOWN: { + R: {className:"MJXc-TeX-unknown-R"}, + I: {className:"MJXc-TeX-unknown-I"}, + B: {className:"MJXc-TeX-unknown-B"}, + BI: {className:"MJXc-TeX-unknown-BI"} + }, VARIANT: { "normal": {fonts:[MAIN,SIZE1,AMS], cache: {}, diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index 8e0807b83..754823231 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -104,13 +104,16 @@ ".MJXc-space2": {"margin-left":".222em"}, ".MJXc-space3": {"margin-left":".278em"}, - ".MJXc-TeX-unknown": {"font-family":UNKNOWNFAMILY}, + ".MJXc-TeX-unknown-R": {"font-family":UNKNOWNFAMILY, "font-style":"normal", "font-weight":"normal"}, + ".MJXc-TeX-unknown-I": {"font-family":UNKNOWNFAMILY, "font-style":"italic", "font-weight":"normal"}, + ".MJXc-TeX-unknown-B": {"font-family":UNKNOWNFAMILY, "font-style":"normal", "font-weight":"bold"}, + ".MJXc-TeX-unknown-BI": {"font-family":UNKNOWNFAMILY, "font-style":"italic","font-weight":"bold"}, + "mjx-chartest": { display:"block", position:"absolute", top:0, "line-height":"normal", - "font-size":"500%", - "font-family":UNKNOWNFAMILY + "font-size":"500%" }, "mjx-chartest mjx-char": {display:"inline"}, "mjx-chartest mjx-box": {"padding-top": "500px"}, @@ -526,6 +529,7 @@ // it isnt' found in the given variant. // lookupChar: function (variant,n) { + var VARIANT = variant; while (variant) { for (var i = 0, m = variant.fonts.length; i < m; i++) { var font = this.FONTDATA.FONTS[variant.fonts[i]]; @@ -544,28 +548,34 @@ } variant = this.FONTDATA.VARIANT[variant.chain]; } - return this.unknownChar(variant,n); + return this.unknownChar(VARIANT,n); }, // // Create a fake font entry for an unknown character. // unknownChar: function (variant,n) { HUB.signal.Post(["CommonHTML Jax - unknown char",n,variant]); + var id = ""; if (variant.bold) id += "B"; if (variant.italic) id += "I"; + var unknown = this.FONTDATA.UNKNOWN[id||"R"]; // cache of previously measured characters + if (!unknown[n]) this.getUnknownChar(unknown,n); + return {type:"unknown", n:n, font:unknown}; + }, + getUnknownChar: function (unknown,n) { var c = this.unicodeChar(n); - var HDW = this.getHDW(c); var a = (HDW.h-HDW.d)/2+AFUZZ; // ### FIXME: is this really the axis of the surrounding text? - var unknown = {type:"unknown", n:n, font:{className:"MJXc-TeX-unknown"}}; - unknown.font[n] = [.8,.2,HDW.w,0,HDW.w,{a:a, A:HDW.h-a, d:HDW.d}]; - unknown.font[n].c = c - return unknown; + var HDW = this.getHDW(c,unknown.className); + var a = (HDW.h-HDW.d)/2+AFUZZ; // ### FIXME: is this really the axis of the surrounding text? + // ### FIXME: provide a means of setting the height and depth for individual characters + unknown[n] = [.8,.2,HDW.w,0,HDW.w,{a:a, A:HDW.h-a, d:HDW.d}]; + unknown[n].c = c; }, // // Get the height, depth and width of a character // (height and depth are of the font, not the character). // WARNING: causes reflow of the page! // - getHDW: function (c) { - var test1 = HTML.addElement(document.body,"mjx-chartest",{},[["mjx-char",{},[c]]]); - var test2 = HTML.addElement(document.body,"mjx-chartest",{},[["mjx-char",{},[c,["mjx-box"]]]]); + getHDW: function (c,name) { + var test1 = HTML.addElement(document.body,"mjx-chartest",{className:name},[["mjx-char",{},[c]]]); + var test2 = HTML.addElement(document.body,"mjx-chartest",{className:name},[["mjx-char",{},[c,["mjx-box"]]]]); var em = window.parseFloat(window.getComputedStyle(test1).fontSize); var d = (test2.offsetHeight-500)/em; var w = test1.offsetWidth/em, h = test1.offsetHeight/em - d;