diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index f19bd856e..ad5df4193 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -334,7 +334,7 @@ }, getHoverSpan: function (jax,math) {return jax.root.CHTMLspanElement()}, 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}; // if (bbox.width) {BBOX.width = bbox.width} return BBOX; @@ -523,11 +523,11 @@ SPAN = HTML.addElement(span,"span",{className:options.className}); child.toCommonHTML(SPAN); if (!options.noBBox) { - this.bbox.w += child.bbox.w + child.bbox.l + child.bbox.r; - if (child.bbox.h > this.bbox.h) this.bbox.h = child.bbox.h; - if (child.bbox.d > this.bbox.d) this.bbox.d = child.bbox.d; - if (child.bbox.t > this.bbox.t) this.bbox.t = child.bbox.t; - if (child.bbox.b > this.bbox.b) this.bbox.b = child.bbox.b; + this.CHTML.w += child.CHTML.w + child.CHTML.l + child.CHTML.r; + if (child.CHTML.h > this.CHTML.h) this.CHTML.h = child.CHTML.h; + if (child.CHTML.d > this.CHTML.d) this.CHTML.d = child.CHTML.d; + if (child.CHTML.t > this.CHTML.t) this.CHTML.t = child.CHTML.t; + if (child.CHTML.b > this.CHTML.b) this.CHTML.b = child.CHTML.b; } } else if (options.forceChild) {HTML.addElement(span,"span")} } @@ -535,7 +535,8 @@ }, 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; // ### FIXME: This is a hack to handle the different spacing of the // ### integral sign in Times compared to CM fonts @@ -595,17 +596,18 @@ // ### arrows (all sets), widths of braces 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); // ### 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:{ // "margin-top":CHTML.Em(H-.9), "margin-bottom":CHTML.Em(D-.25) // }},[text]); }, - CHTMLbbox: function (n) { - if (this.data[n] && this.data[n].bbox) return this.data[n].bbox; + CHTMLbboxFor: function (n) { + 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}; }, @@ -663,18 +665,18 @@ this.CHTMLadjustAccent(span); var values = this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop"); if (values.scriptlevel === 0) { - this.bbox.l = CHTML.length2em(values.lspace); - this.bbox.r = CHTML.length2em(values.rspace); - span.style.marginLeft = CHTML.Em(this.bbox.l); - span.style.marginRight = CHTML.Em(this.bbox.r); + this.CHTML.l = CHTML.length2em(values.lspace); + this.CHTML.r = CHTML.length2em(values.rspace); + span.style.marginLeft = CHTML.Em(this.CHTML.l); + span.style.marginRight = CHTML.Em(this.CHTML.r); } else { - this.bbox.l = .15; - this.bbox.r = .1; + this.CHTML.l = .15; + this.CHTML.r = .1; } if (values.displaystyle && values.largeop) { var box = HTML.Element("span",{className:"MJXc-largeop"}); 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"; } // ### FIXME: Handle embellished op spacing @@ -690,8 +692,8 @@ 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]} if (C) c = span.innerHTML = C; - if (c.match(/[\u02C6-\u02DC\u00A8]/)) {this.bbox.acc = -.52} - else if (c === "\u2192") {this.bbox.acc = -.15; this.bbox.vec = true} + if (c.match(/[\u02C6-\u02DC\u00A8]/)) {this.CHTML.acc = -.52} + else if (c === "\u2192") {this.CHTML.acc = -.15; this.CHTML.vec = true} } }, CHTMLcanStretch: function (direction,H,D) { @@ -701,13 +703,13 @@ c = CHTML.DELIMITERS[c]; var stretch = (c && c.dir === direction.substr(0,1)); 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))); } return stretch; }, 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"); 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); @@ -733,7 +735,7 @@ var w = CHTML.length2em(values.width), h = CHTML.length2em(values.height), d = CHTML.length2em(values.depth); - var bbox = this.bbox; + var bbox = this.CHTML; bbox.w = w; bbox.h = h; bbox.d = d; if (w < 0) { // ### FIXME: lastIsInt hack @@ -762,12 +764,12 @@ } if (values.height !== "") { 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; } if (values.depth !== "") { 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; } if (values.voffset !== "") { @@ -786,7 +788,7 @@ if (m == null) {m = -BIGDIMEN} length = String(length); 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(/^[-+]/)}; } }); @@ -794,10 +796,10 @@ MML.munderover.Augment({ toCommonHTML: function (span) { span = this.CHTMLdefaultSpan(span,{childSpans:true, className:"", noBBox:true}); - var obox = this.CHTMLbbox(this.over), - ubox = this.CHTMLbbox(this.under), - bbox = this.CHTMLbbox(this.base), - BBOX = this.bbox, acc = obox.acc; + var obox = this.CHTMLbboxFor(this.over), + ubox = this.CHTMLbboxFor(this.under), + bbox = this.CHTMLbboxFor(this.base), + BBOX = this.CHTML, acc = obox.acc; if (this.data[this.over]) { span.lastChild.firstChild.style.marginLeft = obox.l = 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]; if (!base) base = {bbox: {h:.8, d:.2}}; span.firstChild.style.marginRight = ".05em"; - var h = Math.max(.4,base.bbox.h-.4); - d = Math.max(.2,base.bbox.d+.1); - var bbox = this.bbox; + var h = Math.max(.4,base.CHTML.h-.4); + d = Math.max(.2,base.CHTML.d+.1); + var bbox = this.CHTML; if (sup && sub) { var box = HTML.Element("span",{className:"MJXc-script-box", style:{ - height: CHTML.Em(h+sup.bbox.h*.8 + d+sub.bbox.d*.8), - "vertical-align": CHTML.Em(-d-sub.bbox.d*.8) + height: CHTML.Em(h+sup.CHTML.h*.8 + d+sub.CHTML.d*.8), + "vertical-align": CHTML.Em(-d-sub.CHTML.d*.8) }},[ ["span",{},[["span",{},[["span",{ - style:{"margin-bottom":CHTML.Em(-(sup.bbox.d-.05))} + style:{"margin-bottom":CHTML.Em(-(sup.CHTML.d-.05))} }]]]]], ["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); @@ -859,21 +861,21 @@ box.firstChild.firstChild.firstChild.appendChild(span.lastChild); box.lastChild.firstChild.firstChild.appendChild(span.lastChild); span.appendChild(box); - bbox.h = Math.max(base.bbox.h,sup.bbox.h*.8+h); - bbox.d = Math.max(base.bbox.d,sub.bbox.d*.8+d); - bbox.w = base.bbox.w + Math.max(sup.bbox.w,sub.bbox.w) + .07; + bbox.h = Math.max(base.CHTML.h,sup.CHTML.h*.8+h); + bbox.d = Math.max(base.CHTML.d,sub.CHTML.d*.8+d); + bbox.w = base.CHTML.w + Math.max(sup.CHTML.w,sub.CHTML.w) + .07; } else if (sup) { span.lastChild.style.verticalAlign = CHTML.Em(h); sup.CHTMLhandleScriptlevel(span.lastChild); - bbox.h = Math.max(base.bbox.h,sup.bbox.h*.8+h); - bbox.d = Math.max(base.bbox.d,sup.bbox.d*.8-h); - bbox.w = base.bbox.w + sup.bbox.w + .07; + bbox.h = Math.max(base.CHTML.h,sup.CHTML.h*.8+h); + bbox.d = Math.max(base.CHTML.d,sup.CHTML.d*.8-h); + bbox.w = base.CHTML.w + sup.CHTML.w + .07; } else if (sub) { span.lastChild.style.verticalAlign = CHTML.Em(-d); sub.CHTMLhandleScriptlevel(span.lastChild); - bbox.h = Math.max(base.bbox.h,sub.bbox.h*.8-d); - bbox.d = Math.max(base.bbox.d,sub.bbox.d*.8+d); - bbox.w = base.bbox.w + sub.bbox.w + .07; + bbox.h = Math.max(base.CHTML.h,sub.CHTML.h*.8-d); + bbox.d = Math.max(base.CHTML.d,sub.CHTML.d*.8+d); + bbox.w = base.CHTML.w + sub.CHTML.w + .07; } return span; } @@ -896,7 +898,7 @@ ]); denom.firstChild.lastChild.appendChild(span.lastChild); 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.h = nbox.h+nbox.d + .1 + .25; bbox.d = dbox.h+dbox.d - .25; @@ -925,7 +927,7 @@ return span; }, 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 surd = HTML.Element("span",{className:"MJXc-surd"},[ ["span",{style:{"font-size":scale+"%","margin-top":t}},["\u221A"]] @@ -944,8 +946,8 @@ root.appendChild(base); span.appendChild(surd); span.appendChild(root); - this.bbox.h = bbox.h + .18; this.bbox.d = bbox.d; - this.bbox.w = bbox.w + W; + this.CHTML.h = bbox.h + .18; this.CHTML.d = bbox.d; + this.CHTML.w = bbox.w + W; return span; } }); @@ -955,7 +957,7 @@ span = this.CHTMLdefaultSpan(span,{ 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); root.className = "MJXc-script"; // ### FIXME: should be scriptscript var scale = parseInt(sqrt.firstChild.firstChild.style.fontSize); @@ -964,8 +966,8 @@ 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 span.appendChild(root); span.appendChild(sqrt); - this.bbox.w += Math.max(0,rbox.w*.8+r); - this.bbox.h = Math.max(this.bbox.h,rbox.h*.8+v); + this.CHTML.w += Math.max(0,rbox.w*.8+r); + this.CHTML.h = Math.max(this.CHTML.h,rbox.h*.8+v); return span; }, CHTMLlayoutRoot: MML.msqrt.prototype.CHTMLlayoutRoot @@ -974,12 +976,12 @@ MML.mrow.Augment({ toCommonHTML: function (span) { span = this.CHTMLdefaultSpan(span); - var bbox = this.bbox; + var bbox = this.CHTML; var H = bbox.h, D = bbox.d; for (var i = 0, m = this.data.length; i < m; i++) { var data = this.data[i]; 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); bbox.w += dbox.w - w; if (dbox.h > bbox.h) bbox.h = dbox.h; @@ -1034,13 +1036,13 @@ var row = this.data[i]; if (row) { 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; for (j = 0, n = row.data.length; j < n; j++) { var cell = row.data[j]; if (cell) { 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 (i) cspan.style.paddingTop = CHTML.Em(rspace); cspan.style.textAlign = calign; @@ -1050,7 +1052,7 @@ 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.l = bbox.r = .125; return span; @@ -1062,7 +1064,7 @@ span = this.CHTMLcreateSpan(span); if (this.data[i]) { this.data[i].toCommonHTML(span); - this.bbox = this.data[i].bbox; + this.CHTML = this.data[i].CHTML; } return span; }