diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index e7a39eefd..d142fec1e 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -1242,14 +1242,18 @@ // // Get the scale of the base and its limits // - this.CHTMLgetScaleFactors(values,sub,sup); - var sscale = values.sscale; + var sscale = 1; + if (values.scriptlevel < 2) { + sscale = SCRIPTFACTOR; + if (sub) this.data[this.sub].CHTMLhandleScriptlevel(sub); + if (sup) this.data[this.sup].CHTMLhandleScriptlevel(sup); + } // // Get the bounding boxes and maximum width of scripts // - var boxes = []; this.CHTMLgetBBoxes(boxes,values); - var BBOX = this.CHTML, - bbox = boxes[this.base], subbox = boxes[this.sub], supbox = boxes[this.sup]; + var boxes = [], BBOX = this.CHTML; + for (var i = 0, m = this.data.length; i < m; i++) boxes[i] = this.CHTMLbboxFor(i); + var bbox = boxes[this.base], subbox = boxes[this.sub], supbox = boxes[this.sup]; BBOX.w = bbox.w; BBOX.h = bbox.h; BBOX.d = bbox.d; // modified below // // Get initial values for parameters @@ -1275,13 +1279,22 @@ if (!sup) { if (sub) { v = Math.max(v,CHTML.TEX.sub1,sscale*subbox.h-(4/5)*ex,values.subscriptshift); - this.CHTMLplaceSub(sub,subbox,v,s,BBOX,bbox.w,sscale,sup); + sub.style.verticalAlign = CHTML.Em(-v/sscale); + sub.style.paddingRight = CHTML.Em(s/sscale); + BBOX.w += sscale*(subbox.w + (subbox.L||0) + (subbox.R||0)) + s; + BBOX.h = Math.max(BBOX.h,sscale*subbox.h-v); + BBOX.d = Math.max(BBOX.d,sscale*subbox.d+v); } } else { if (!sub) { p = CHTML.TEX[(values.displaystyle ? "sup1" : (values.texprimestyle ? "sup3" : "sup2"))]; u = Math.max(u,p,sscale*supbox.d+(1/4)*ex,values.superscriptshift); - this.CHTMLplaceSuper(sup,supbox,u,s,BBOX,bbox.w,delta,sscale,sub); + sup.style.verticalAlign = CHTML.Em(u/sscale); + sup.style.paddingLeft = CHTML.Em(delta/sscale); + sup.style.paddingRight = CHTML.Em(s/sscale); + BBOX.w += sscale*(supbox.w + (supbox.L||0) + (supbox.R||0)) + s + delta; + BBOX.h = Math.max(BBOX.h,sscale*supbox.h+u); + BBOX.d = Math.max(BBOX.d,sscale*supbox.d-u); } else { v = Math.max(v,CHTML.TEX.sub2); var t = CHTML.TEX.rule_thickness; @@ -1292,56 +1305,20 @@ } u = Math.max(u,values.superscriptshift); v = Math.max(v,values.subscriptshift); - this.CHTMLplaceSuper(sup,supbox,u,s,BBOX,bbox.w,delta,sscale,sub,subbox,v,stack); - this.CHTMLplaceSub(sub,subbox,v,s,BBOX,bbox.w,sscale,sup); + sub.style.paddingRight = CHTML.Em(s/sscale); + sup.style.paddingBottom = CHTML.Em((u+v)/sscale-supbox.d-subbox.h); + sup.style.paddingLeft = CHTML.Em(delta/sscale); + sup.style.paddingRight = CHTML.Em(s/sscale); + stack.style.verticalAlign = CHTML.Em(-v); + BBOX.w += Math.max( + sscale*(supbox.w + (supbox.L||0) + (supbox.R||0)) + s + delta, + sscale*(subbox.w + (subbox.L||0) + (subbox.R||0)) + s + ); + BBOX.h = Math.max(BBOX.h,sscale*supbox.h+u,sscale*subbox.h-v); + BBOX.d = Math.max(BBOX.d,sscale*supbox.d-u,sscale*subbox.d+v); } } return node; - }, - // - // Compute scaling factors for the under- and over-scripts - // - CHTMLgetScaleFactors: function (values,sub,sup) { - values.sscale = 1; - if (values.scriptlevel < 2) { - values.sscale = SCRIPTFACTOR; - if (sub) this.data[this.sub].CHTMLhandleScriptlevel(sub); - if (sup) this.data[this.sup].CHTMLhandleScriptlevel(sup); - } - }, - // - // Get the bounding boxes for the children - // - CHTMLgetBBoxes: function (bbox,values) { - var i, m = this.data.length; - for (i = 0; i < m; i++) bbox[i] = this.CHTMLbboxFor(i); - }, - // - // Place subscript - // - CHTMLplaceSub: function (sub,subbox,v,s,BBOX,w,sscale,sup) { - if (!sup) sub.style.verticalAlign = CHTML.Em(-v/sscale); - sub.style.paddingRight = CHTML.Em(s/sscale); - BBOX.w = Math.max(BBOX.w,w+sscale*(subbox.w+(subbox.L||0)+(subbox.R||0))+s); - BBOX.h = Math.max(BBOX.h,sscale*subbox.h-v); - BBOX.d = Math.max(BBOX.d,sscale*subbox.d+v); - // ### FIXME: handle BBOX.l and BBOX.r - }, - // - // Place subscript - // - CHTMLplaceSuper: function (sup,supbox,u,s,BBOX,w,delta,sscale,sub,subbox,v,stack) { - if (sub) { - sup.style.paddingBottom = CHTML.Em((u+v)/sscale-supbox.d-subbox.h); - stack.style.verticalAlign = CHTML.Em(-v); - } else { - sup.style.verticalAlign = CHTML.Em(u/sscale); - } - sup.style.paddingLeft = CHTML.Em(delta/sscale); - sup.style.paddingRight = CHTML.Em(s/sscale); - BBOX.w = Math.max(BBOX.w,w+sscale*(supbox.w+(supbox.L||0)+(supbox.R||0))+s+delta); - BBOX.h = Math.max(BBOX.h,sscale*supbox.h+u); - BBOX.d = Math.max(BBOX.d,sscale*supbox.d-u); } });