Make merror use surrounding font rather than MathJax fonts, and handle size of unknown text properly.

This commit is contained in:
Davide P. Cervone 2015-03-21 08:15:45 -04:00
parent ed7807ac36
commit ac30932664

View File

@ -391,14 +391,17 @@
// //
this.initCHTML(math,node); this.initCHTML(math,node);
this.savePreview(script); this.savePreview(script);
this.CHTMLnode = node;
try { try {
math.setTeXclass(); math.setTeXclass();
math.toCommonHTML(node); math.toCommonHTML(node);
} catch (err) { } catch (err) {
while (node.firstChild) node.removeChild(node.firstChild); while (node.firstChild) node.removeChild(node.firstChild);
delete this.CHTMLnode;
this.restorePreview(script); this.restorePreview(script);
throw err; throw err;
} }
delete this.CHTMLnode;
this.restorePreview(script); this.restorePreview(script);
// //
// Put it in place, and remove the processing marker // Put it in place, and remove the processing marker
@ -761,12 +764,12 @@
if (!this.STYLEDTEXT[id]) this.STYLEDTEXT[id] = {className:variant.className||""}; if (!this.STYLEDTEXT[id]) this.STYLEDTEXT[id] = {className:variant.className||""};
var unknown = this.STYLEDTEXT[id]; var unknown = this.STYLEDTEXT[id];
if (!unknown["_"+text]) { if (!unknown["_"+text]) {
var HDW = this.getHDW(text,"",style); var HDW = this.getHDW(text,variant.className||"",style);
var a = (HDW.h-HDW.d)/2+AFUZZ; // ### FIXME: is this really the axis of the surrounding text? var a = (HDW.h-HDW.d)/2+AFUZZ; // ### FIXME: is this really the axis of the surrounding text?
unknown["_"+text] = [.8,.2,HDW.w,0,HDW.w,{a:a, A:HDW.h-a, d:HDW.d}]; unknown["_"+text] = [.8,.2,HDW.w,0,HDW.w,{a:a, A:HDW.h-a, d:HDW.d}];
unknown["_"+text].c = text; unknown["_"+text].c = text;
} }
return {type:"unknown", n:"_"+text, font:unknown, style:style}; return {type:"unknown", n:"_"+text, font:unknown, style:style, rscale:variant.rscale};
}, },
// //
@ -775,13 +778,13 @@
// WARNING: causes reflow of the page! // WARNING: causes reflow of the page!
// //
getHDW: function (c,name,styles) { getHDW: function (c,name,styles) {
var test1 = HTML.addElement(document.body,"mjx-chartest",{className:name,style:styles},[["mjx-char",{},[c]]]); var test1 = HTML.addElement(CHTML.CHTMLnode,"mjx-chartest",{className:name,style:styles},[["mjx-char",{},[c]]]);
var test2 = HTML.addElement(document.body,"mjx-chartest",{className:name,style:styles},[["mjx-char",{},[c,["mjx-box"]]]]); var test2 = HTML.addElement(CHTML.CHTMLnode,"mjx-chartest",{className:name,style:styles},[["mjx-char",{},[c,["mjx-box"]]]]);
var em = window.parseFloat(window.getComputedStyle(test1).fontSize); var em = CHTML.outerEm;
var d = (test2.offsetHeight-500)/em; var d = (test2.offsetHeight-500)/em;
var w = test1.offsetWidth/em, h = test1.offsetHeight/em - d; var w = test1.offsetWidth/em, h = test1.offsetHeight/em - d;
document.body.removeChild(test1); CHTML.CHTMLnode.removeChild(test1);
document.body.removeChild(test2); CHTML.CHTMLnode.removeChild(test2);
return {h:h, d:d, w:w} return {h:h, d:d, w:w}
}, },
@ -824,7 +827,7 @@
if (bbox.d < C[1]) bbox.b = bbox.d = C[1]; if (bbox.d < C[1]) bbox.b = bbox.d = C[1];
if (bbox.l > bbox.w+C[3]) bbox.l = bbox.w+C[3]; if (bbox.l > bbox.w+C[3]) bbox.l = bbox.w+C[3];
if (bbox.r < bbox.w+C[4]) bbox.r = bbox.w+C[4]; if (bbox.r < bbox.w+C[4]) bbox.r = bbox.w+C[4];
bbox.w += C[2]; bbox.w += C[2] * (item.rscale||1);
if (m == 1 && font.skew && font.skew[item.n]) bbox.skew = font.skew[item.n]; if (m == 1 && font.skew && font.skew[item.n]) bbox.skew = font.skew[item.n];
if (C[5].rfix) this.flushText(node,state).style.marginRight = CHTML.Em(C[5].rfix/1000); if (C[5].rfix) this.flushText(node,state).style.marginRight = CHTML.Em(C[5].rfix/1000);
}, },
@ -1735,8 +1738,10 @@
MML.mtext.Augment({ MML.mtext.Augment({
CHTMLgetVariant: function () { CHTMLgetVariant: function () {
if (CHTML.config.mtextFontInherit) { if (CHTML.config.mtextFontInherit || this.Parent().type === "merror") {
var variant = {cache:{}, fonts:[], className:"MJXc-font-inherit", style:{}}; var scale = 1/CHTML.scale;
var variant = {cache:{}, fonts:[], className:"MJXc-font-inherit", rscale:scale,
style:{"font-size":CHTML.Percent(scale)}};
var name = this.Get("mathvariant"); var name = this.Get("mathvariant");
if (name.match(/bold/)) variant.style["font-weight"] = "bold"; if (name.match(/bold/)) variant.style["font-weight"] = "bold";
if (name.match(/italic/)) variant.style["font-style"] = "italic"; if (name.match(/italic/)) variant.style["font-style"] = "italic";