Change .bbox to .CHTML to prevent conflicts with other output jax

This commit is contained in:
Davide P. Cervone 2014-08-16 08:27:02 -04:00
parent 0864dfcd79
commit 3463017f85

View File

@ -334,7 +334,7 @@
}, },
getHoverSpan: function (jax,math) {return jax.root.CHTMLspanElement()}, getHoverSpan: function (jax,math) {return jax.root.CHTMLspanElement()},
getHoverBBox: function (jax,span,math) { getHoverBBox: function (jax,span,math) {
// var bbox = span.bbox, em = jax.CHTML.outerEm; // var bbox = span.CHTML, em = jax.CHTML.outerEm;
// var BBOX = {w:bbox.w*em, h:bbox.h*em, d:bbox.d*em}; // var BBOX = {w:bbox.w*em, h:bbox.h*em, d:bbox.d*em};
// if (bbox.width) {BBOX.width = bbox.width} // if (bbox.width) {BBOX.width = bbox.width}
return BBOX; return BBOX;
@ -523,11 +523,11 @@
SPAN = HTML.addElement(span,"span",{className:options.className}); SPAN = HTML.addElement(span,"span",{className:options.className});
child.toCommonHTML(SPAN); child.toCommonHTML(SPAN);
if (!options.noBBox) { if (!options.noBBox) {
this.bbox.w += child.bbox.w + child.bbox.l + child.bbox.r; this.CHTML.w += child.CHTML.w + child.CHTML.l + child.CHTML.r;
if (child.bbox.h > this.bbox.h) this.bbox.h = child.bbox.h; if (child.CHTML.h > this.CHTML.h) this.CHTML.h = child.CHTML.h;
if (child.bbox.d > this.bbox.d) this.bbox.d = child.bbox.d; if (child.CHTML.d > this.CHTML.d) this.CHTML.d = child.CHTML.d;
if (child.bbox.t > this.bbox.t) this.bbox.t = child.bbox.t; if (child.CHTML.t > this.CHTML.t) this.CHTML.t = child.CHTML.t;
if (child.bbox.b > this.bbox.b) this.bbox.b = child.bbox.b; if (child.CHTML.b > this.CHTML.b) this.CHTML.b = child.CHTML.b;
} }
} else if (options.forceChild) {HTML.addElement(span,"span")} } else if (options.forceChild) {HTML.addElement(span,"span")}
} }
@ -535,7 +535,8 @@
}, },
CHTMLcreateSpan: function (span) { CHTMLcreateSpan: function (span) {
this.bbox = {w:0, h:0, d:0, l:0, r:0, t:0, b:0}; if (!this.CHTML) this.CHTML = {};
this.CHTML = {w:0, h:0, d:0, l:0, r:0, t:0, b:0};
if (this.inferred) return span; if (this.inferred) return span;
// ### FIXME: This is a hack to handle the different spacing of the // ### FIXME: This is a hack to handle the different spacing of the
// ### integral sign in Times compared to CM fonts // ### integral sign in Times compared to CM fonts
@ -595,17 +596,18 @@
// ### arrows (all sets), widths of braces // ### arrows (all sets), widths of braces
if (h > H) H = h; if (d > D) D = d; W += w; if (h > H) H = h; if (d > D) D = d; W += w;
} }
this.bbox = {h:.9, d:.3, w:W, l:0, r:0, t:H, b:D}; if (!this.CHML) this.CHTML = {};
this.CHTML = {h:.9, d:.3, w:W, l:0, r:0, t:H, b:D};
HTML.addText(span,text); HTML.addText(span,text);
// ### FIXME: use this to get proper bounding boxes in the future // ### FIXME: use this to get proper bounding boxes in the future
// this.bbox = {h:H, d:D, w:W, l:0, r:0}; // this.CHTML = {h:H, d:D, w:W, l:0, r:0};
// HTML.addElement(span,"span",{className:"MJXc-char",style:{ // HTML.addElement(span,"span",{className:"MJXc-char",style:{
// "margin-top":CHTML.Em(H-.9), "margin-bottom":CHTML.Em(D-.25) // "margin-top":CHTML.Em(H-.9), "margin-bottom":CHTML.Em(D-.25)
// }},[text]); // }},[text]);
}, },
CHTMLbbox: function (n) { CHTMLbboxFor: function (n) {
if (this.data[n] && this.data[n].bbox) return this.data[n].bbox; if (this.data[n] && this.data[n].CHTML) return this.data[n].CHTML;
return {w:0, h:0, d:0, l:0, r:0, t:0, b:0}; return {w:0, h:0, d:0, l:0, r:0, t:0, b:0};
}, },
@ -663,18 +665,18 @@
this.CHTMLadjustAccent(span); this.CHTMLadjustAccent(span);
var values = this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop"); var values = this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop");
if (values.scriptlevel === 0) { if (values.scriptlevel === 0) {
this.bbox.l = CHTML.length2em(values.lspace); this.CHTML.l = CHTML.length2em(values.lspace);
this.bbox.r = CHTML.length2em(values.rspace); this.CHTML.r = CHTML.length2em(values.rspace);
span.style.marginLeft = CHTML.Em(this.bbox.l); span.style.marginLeft = CHTML.Em(this.CHTML.l);
span.style.marginRight = CHTML.Em(this.bbox.r); span.style.marginRight = CHTML.Em(this.CHTML.r);
} else { } else {
this.bbox.l = .15; this.CHTML.l = .15;
this.bbox.r = .1; this.CHTML.r = .1;
} }
if (values.displaystyle && values.largeop) { if (values.displaystyle && values.largeop) {
var box = HTML.Element("span",{className:"MJXc-largeop"}); var box = HTML.Element("span",{className:"MJXc-largeop"});
box.appendChild(span.firstChild); span.appendChild(box); box.appendChild(span.firstChild); span.appendChild(box);
this.bbox.h *= 1.2; this.bbox.d *= 1.2; this.CHTML.h *= 1.2; this.CHTML.d *= 1.2;
if (this.data.join("") === "\u222B") box.className += " MJXc-int"; if (this.data.join("") === "\u222B") box.className += " MJXc-int";
} }
// ### FIXME: Handle embellished op spacing // ### FIXME: Handle embellished op spacing
@ -690,8 +692,8 @@
if (over && this === over.CoreMO() && parent.Get("accent")) {C = CHTML.REMAPACCENT[c]} if (over && this === over.CoreMO() && parent.Get("accent")) {C = CHTML.REMAPACCENT[c]}
else if (under && this === under.CoreMO() && parent.Get("accentunder")) {C = CHTML.REMAPACCENTUNDER[c]} else if (under && this === under.CoreMO() && parent.Get("accentunder")) {C = CHTML.REMAPACCENTUNDER[c]}
if (C) c = span.innerHTML = C; if (C) c = span.innerHTML = C;
if (c.match(/[\u02C6-\u02DC\u00A8]/)) {this.bbox.acc = -.52} if (c.match(/[\u02C6-\u02DC\u00A8]/)) {this.CHTML.acc = -.52}
else if (c === "\u2192") {this.bbox.acc = -.15; this.bbox.vec = true} else if (c === "\u2192") {this.CHTML.acc = -.15; this.CHTML.vec = true}
} }
}, },
CHTMLcanStretch: function (direction,H,D) { CHTMLcanStretch: function (direction,H,D) {
@ -701,13 +703,13 @@
c = CHTML.DELIMITERS[c]; c = CHTML.DELIMITERS[c];
var stretch = (c && c.dir === direction.substr(0,1)); var stretch = (c && c.dir === direction.substr(0,1));
if (stretch) { if (stretch) {
stretch = (this.bbox.h !== H || this.bbox.d !== D || stretch = (this.CHTML.h !== H || this.CHTML.d !== D ||
(this.Get("minsize",true) || this.Get("maxsize",true))); (this.Get("minsize",true) || this.Get("maxsize",true)));
} }
return stretch; return stretch;
}, },
CHTMLstretchV: function (h,d) { CHTMLstretchV: function (h,d) {
var span = this.CHTMLspanElement(), bbox = this.bbox; //bbox.w = .4; // ## adjust width var span = this.CHTMLspanElement(), bbox = this.CHTML; //bbox.w = .4; // ## adjust width
var values = this.getValues("symmetric","maxsize","minsize"); var values = this.getValues("symmetric","maxsize","minsize");
if (values.symmetric) {H = 2*Math.max(h-.25,d+.25)} else {H = h + d} if (values.symmetric) {H = 2*Math.max(h-.25,d+.25)} else {H = h + d}
values.maxsize = CHTML.length2em(values.maxsize,bbox.h+bbox.d); values.maxsize = CHTML.length2em(values.maxsize,bbox.h+bbox.d);
@ -733,7 +735,7 @@
var w = CHTML.length2em(values.width), var w = CHTML.length2em(values.width),
h = CHTML.length2em(values.height), h = CHTML.length2em(values.height),
d = CHTML.length2em(values.depth); d = CHTML.length2em(values.depth);
var bbox = this.bbox; var bbox = this.CHTML;
bbox.w = w; bbox.h = h; bbox.d = d; bbox.w = w; bbox.h = h; bbox.d = d;
if (w < 0) { if (w < 0) {
// ### FIXME: lastIsInt hack // ### FIXME: lastIsInt hack
@ -762,12 +764,12 @@
} }
if (values.height !== "") { if (values.height !== "") {
dimen = this.CHTMLdimen(values.height,"h",0); dimen = this.CHTMLdimen(values.height,"h",0);
if (!dimen.pm) T += -this.CHTMLbbox(0).h; if (!dimen.pm) T += -this.CHTMLbboxFor(0).h;
T += dimen.len; T += dimen.len;
} }
if (values.depth !== "") { if (values.depth !== "") {
dimen = this.CHTMLdimen(values.depth,"d",0); dimen = this.CHTMLdimen(values.depth,"d",0);
if (!dimen.pm) {B += -this.CHTMLbbox(0).d; V += -dimen.len} if (!dimen.pm) {B += -this.CHTMLbboxFor(0).d; V += -dimen.len}
B += dimen.len; B += dimen.len;
} }
if (values.voffset !== "") { if (values.voffset !== "") {
@ -786,7 +788,7 @@
if (m == null) {m = -BIGDIMEN} if (m == null) {m = -BIGDIMEN}
length = String(length); length = String(length);
var match = length.match(/width|height|depth/); var match = length.match(/width|height|depth/);
var size = (match ? this.bbox[match[0].charAt(0)] : (d ? this.bbox[d] : 0)); var size = (match ? this.CHTML[match[0].charAt(0)] : (d ? this.CHTML[d] : 0));
return {len: CHTML.length2em(length,size)||0, pm: !!length.match(/^[-+]/)}; return {len: CHTML.length2em(length,size)||0, pm: !!length.match(/^[-+]/)};
} }
}); });
@ -794,10 +796,10 @@
MML.munderover.Augment({ MML.munderover.Augment({
toCommonHTML: function (span) { toCommonHTML: function (span) {
span = this.CHTMLdefaultSpan(span,{childSpans:true, className:"", noBBox:true}); span = this.CHTMLdefaultSpan(span,{childSpans:true, className:"", noBBox:true});
var obox = this.CHTMLbbox(this.over), var obox = this.CHTMLbboxFor(this.over),
ubox = this.CHTMLbbox(this.under), ubox = this.CHTMLbboxFor(this.under),
bbox = this.CHTMLbbox(this.base), bbox = this.CHTMLbboxFor(this.base),
BBOX = this.bbox, acc = obox.acc; BBOX = this.CHTML, acc = obox.acc;
if (this.data[this.over]) { if (this.data[this.over]) {
span.lastChild.firstChild.style.marginLeft = obox.l = span.lastChild.firstChild.style.marginLeft = obox.l =
span.lastChild.firstChild.style.marginRight = obox.r = 0; span.lastChild.firstChild.style.marginRight = obox.r = 0;
@ -839,19 +841,19 @@
var base = this.data[this.base], sub = this.data[this.sub], sup = this.data[this.sup]; var base = this.data[this.base], sub = this.data[this.sub], sup = this.data[this.sup];
if (!base) base = {bbox: {h:.8, d:.2}}; if (!base) base = {bbox: {h:.8, d:.2}};
span.firstChild.style.marginRight = ".05em"; span.firstChild.style.marginRight = ".05em";
var h = Math.max(.4,base.bbox.h-.4); var h = Math.max(.4,base.CHTML.h-.4);
d = Math.max(.2,base.bbox.d+.1); d = Math.max(.2,base.CHTML.d+.1);
var bbox = this.bbox; var bbox = this.CHTML;
if (sup && sub) { if (sup && sub) {
var box = HTML.Element("span",{className:"MJXc-script-box", style:{ var box = HTML.Element("span",{className:"MJXc-script-box", style:{
height: CHTML.Em(h+sup.bbox.h*.8 + d+sub.bbox.d*.8), height: CHTML.Em(h+sup.CHTML.h*.8 + d+sub.CHTML.d*.8),
"vertical-align": CHTML.Em(-d-sub.bbox.d*.8) "vertical-align": CHTML.Em(-d-sub.CHTML.d*.8)
}},[ }},[
["span",{},[["span",{},[["span",{ ["span",{},[["span",{},[["span",{
style:{"margin-bottom":CHTML.Em(-(sup.bbox.d-.05))} style:{"margin-bottom":CHTML.Em(-(sup.CHTML.d-.05))}
}]]]]], }]]]]],
["span",{},[["span",{},[["span",{ ["span",{},[["span",{},[["span",{
style:{"margin-top":CHTML.Em(-(sup.bbox.h-.05))} style:{"margin-top":CHTML.Em(-(sup.CHTML.h-.05))}
}]]]]] }]]]]]
]); ]);
sub.CHTMLhandleScriptlevel(box.firstChild); sub.CHTMLhandleScriptlevel(box.firstChild);
@ -859,21 +861,21 @@
box.firstChild.firstChild.firstChild.appendChild(span.lastChild); box.firstChild.firstChild.firstChild.appendChild(span.lastChild);
box.lastChild.firstChild.firstChild.appendChild(span.lastChild); box.lastChild.firstChild.firstChild.appendChild(span.lastChild);
span.appendChild(box); span.appendChild(box);
bbox.h = Math.max(base.bbox.h,sup.bbox.h*.8+h); bbox.h = Math.max(base.CHTML.h,sup.CHTML.h*.8+h);
bbox.d = Math.max(base.bbox.d,sub.bbox.d*.8+d); bbox.d = Math.max(base.CHTML.d,sub.CHTML.d*.8+d);
bbox.w = base.bbox.w + Math.max(sup.bbox.w,sub.bbox.w) + .07; bbox.w = base.CHTML.w + Math.max(sup.CHTML.w,sub.CHTML.w) + .07;
} else if (sup) { } else if (sup) {
span.lastChild.style.verticalAlign = CHTML.Em(h); span.lastChild.style.verticalAlign = CHTML.Em(h);
sup.CHTMLhandleScriptlevel(span.lastChild); sup.CHTMLhandleScriptlevel(span.lastChild);
bbox.h = Math.max(base.bbox.h,sup.bbox.h*.8+h); bbox.h = Math.max(base.CHTML.h,sup.CHTML.h*.8+h);
bbox.d = Math.max(base.bbox.d,sup.bbox.d*.8-h); bbox.d = Math.max(base.CHTML.d,sup.CHTML.d*.8-h);
bbox.w = base.bbox.w + sup.bbox.w + .07; bbox.w = base.CHTML.w + sup.CHTML.w + .07;
} else if (sub) { } else if (sub) {
span.lastChild.style.verticalAlign = CHTML.Em(-d); span.lastChild.style.verticalAlign = CHTML.Em(-d);
sub.CHTMLhandleScriptlevel(span.lastChild); sub.CHTMLhandleScriptlevel(span.lastChild);
bbox.h = Math.max(base.bbox.h,sub.bbox.h*.8-d); bbox.h = Math.max(base.CHTML.h,sub.CHTML.h*.8-d);
bbox.d = Math.max(base.bbox.d,sub.bbox.d*.8+d); bbox.d = Math.max(base.CHTML.d,sub.CHTML.d*.8+d);
bbox.w = base.bbox.w + sub.bbox.w + .07; bbox.w = base.CHTML.w + sub.CHTML.w + .07;
} }
return span; return span;
} }
@ -896,7 +898,7 @@
]); ]);
denom.firstChild.lastChild.appendChild(span.lastChild); denom.firstChild.lastChild.appendChild(span.lastChild);
span.appendChild(denom); span.appendChild(denom);
var nbox = this.CHTMLbbox(0), dbox = this.CHTMLbbox(1), bbox = this.bbox; var nbox = this.CHTMLbboxFor(0), dbox = this.CHTMLbboxFor(1), bbox = this.CHTML;
bbox.w = Math.max(nbox.w,dbox.w) * .8; bbox.w = Math.max(nbox.w,dbox.w) * .8;
bbox.h = nbox.h+nbox.d + .1 + .25; bbox.h = nbox.h+nbox.d + .1 + .25;
bbox.d = dbox.h+dbox.d - .25; bbox.d = dbox.h+dbox.d - .25;
@ -925,7 +927,7 @@
return span; return span;
}, },
CHTMLlayoutRoot: function (span,base) { CHTMLlayoutRoot: function (span,base) {
var bbox = this.CHTMLbbox(0); var bbox = this.CHTMLbboxFor(0);
var scale = Math.ceil((bbox.h+bbox.d+.14)*100), t = CHTML.Em(14/scale); var scale = Math.ceil((bbox.h+bbox.d+.14)*100), t = CHTML.Em(14/scale);
var surd = HTML.Element("span",{className:"MJXc-surd"},[ var surd = HTML.Element("span",{className:"MJXc-surd"},[
["span",{style:{"font-size":scale+"%","margin-top":t}},["\u221A"]] ["span",{style:{"font-size":scale+"%","margin-top":t}},["\u221A"]]
@ -944,8 +946,8 @@
root.appendChild(base); root.appendChild(base);
span.appendChild(surd); span.appendChild(surd);
span.appendChild(root); span.appendChild(root);
this.bbox.h = bbox.h + .18; this.bbox.d = bbox.d; this.CHTML.h = bbox.h + .18; this.CHTML.d = bbox.d;
this.bbox.w = bbox.w + W; this.CHTML.w = bbox.w + W;
return span; return span;
} }
}); });
@ -955,7 +957,7 @@
span = this.CHTMLdefaultSpan(span,{ span = this.CHTMLdefaultSpan(span,{
childSpans:true, className:"MJXc-box", forceChild:true, noBBox:true childSpans:true, className:"MJXc-box", forceChild:true, noBBox:true
}); });
var rbox = this.CHTMLbbox(1), root = span.removeChild(span.lastChild); var rbox = this.CHTMLbboxFor(1), root = span.removeChild(span.lastChild);
var sqrt = this.CHTMLlayoutRoot(HTML.Element("span"),span.firstChild); var sqrt = this.CHTMLlayoutRoot(HTML.Element("span"),span.firstChild);
root.className = "MJXc-script"; // ### FIXME: should be scriptscript root.className = "MJXc-script"; // ### FIXME: should be scriptscript
var scale = parseInt(sqrt.firstChild.firstChild.style.fontSize); var scale = parseInt(sqrt.firstChild.firstChild.style.fontSize);
@ -964,8 +966,8 @@
root.style.marginRight = CHTML.Em(r); root.style.verticalAlign = CHTML.Em(v); root.style.marginRight = CHTML.Em(r); root.style.verticalAlign = CHTML.Em(v);
if (-r > rbox.w*.8) root.style.marginLeft = CHTML.Em(-r-rbox.w*.8); // ### depends on rbox.w if (-r > rbox.w*.8) root.style.marginLeft = CHTML.Em(-r-rbox.w*.8); // ### depends on rbox.w
span.appendChild(root); span.appendChild(sqrt); span.appendChild(root); span.appendChild(sqrt);
this.bbox.w += Math.max(0,rbox.w*.8+r); this.CHTML.w += Math.max(0,rbox.w*.8+r);
this.bbox.h = Math.max(this.bbox.h,rbox.h*.8+v); this.CHTML.h = Math.max(this.CHTML.h,rbox.h*.8+v);
return span; return span;
}, },
CHTMLlayoutRoot: MML.msqrt.prototype.CHTMLlayoutRoot CHTMLlayoutRoot: MML.msqrt.prototype.CHTMLlayoutRoot
@ -974,12 +976,12 @@
MML.mrow.Augment({ MML.mrow.Augment({
toCommonHTML: function (span) { toCommonHTML: function (span) {
span = this.CHTMLdefaultSpan(span); span = this.CHTMLdefaultSpan(span);
var bbox = this.bbox; var bbox = this.CHTML;
var H = bbox.h, D = bbox.d; var H = bbox.h, D = bbox.d;
for (var i = 0, m = this.data.length; i < m; i++) { for (var i = 0, m = this.data.length; i < m; i++) {
var data = this.data[i]; var data = this.data[i];
if (data && data.CHTMLcanStretch("Vertical",H,D)) { if (data && data.CHTMLcanStretch("Vertical",H,D)) {
var dbox = data.bbox; var w = dbox.w; var dbox = data.CHTML; var w = dbox.w;
data.CHTMLstretchV(H,D); data.CHTMLstretchV(H,D);
bbox.w += dbox.w - w; bbox.w += dbox.w - w;
if (dbox.h > bbox.h) bbox.h = dbox.h; if (dbox.h > bbox.h) bbox.h = dbox.h;
@ -1034,13 +1036,13 @@
var row = this.data[i]; var row = this.data[i];
if (row) { if (row) {
var rspace = CHTML.arrayEntry(RSPACE,i-1), ralign = CHTML.arrayEntry(RALIGN,i); var rspace = CHTML.arrayEntry(RSPACE,i-1), ralign = CHTML.arrayEntry(RALIGN,i);
var rbox = row.bbox, rspan = row.CHTMLspanElement(); var rbox = row.CHTML, rspan = row.CHTMLspanElement();
rspan.style.verticalAlign = ralign; rspan.style.verticalAlign = ralign;
for (j = 0, n = row.data.length; j < n; j++) { for (j = 0, n = row.data.length; j < n; j++) {
var cell = row.data[j]; var cell = row.data[j];
if (cell) { if (cell) {
var cspace = CHTML.arrayEntry(CSPACE,j-1), calign = CHTML.arrayEntry(CALIGN,j); var cspace = CHTML.arrayEntry(CSPACE,j-1), calign = CHTML.arrayEntry(CALIGN,j);
var cbox = cell.bbox, cspan = cell.CHTMLspanElement(); var cbox = cell.CHTML, cspan = cell.CHTMLspanElement();
if (j) {rbox.w += cspace; cspan.style.paddingLeft = CHTML.Em(cspace)} if (j) {rbox.w += cspace; cspan.style.paddingLeft = CHTML.Em(cspace)}
if (i) cspan.style.paddingTop = CHTML.Em(rspace); if (i) cspan.style.paddingTop = CHTML.Em(rspace);
cspan.style.textAlign = calign; cspan.style.textAlign = calign;
@ -1050,7 +1052,7 @@
if (rbox.w > W) W = rbox.w; if (rbox.w > W) W = rbox.w;
} }
} }
var bbox = this.bbox; var bbox = this.CHTML;
bbox.w = W; bbox.h = H/2 + .25; bbox.d = H/2 - .25; bbox.w = W; bbox.h = H/2 + .25; bbox.d = H/2 - .25;
bbox.l = bbox.r = .125; bbox.l = bbox.r = .125;
return span; return span;
@ -1062,7 +1064,7 @@
span = this.CHTMLcreateSpan(span); span = this.CHTMLcreateSpan(span);
if (this.data[i]) { if (this.data[i]) {
this.data[i].toCommonHTML(span); this.data[i].toCommonHTML(span);
this.bbox = this.data[i].bbox; this.CHTML = this.data[i].CHTML;
} }
return span; return span;
} }