From 0fb87f3deaedd097a8f65733d753eae1cd669324 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 15 Apr 2015 19:55:23 -0400 Subject: [PATCH] Right-justify prescripts in mmultiscript elements. Resolves issue #1072. --- .../output/HTML-CSS/autoload/mmultiscripts.js | 37 +++++++++++++++---- .../jax/output/SVG/autoload/mmultiscripts.js | 7 +++- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/unpacked/jax/output/HTML-CSS/autoload/mmultiscripts.js b/unpacked/jax/output/HTML-CSS/autoload/mmultiscripts.js index c80305b7c..b92fbdabb 100644 --- a/unpacked/jax/output/HTML-CSS/autoload/mmultiscripts.js +++ b/unpacked/jax/output/HTML-CSS/autoload/mmultiscripts.js @@ -120,25 +120,48 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { var i = 1, m = this.data.length, W = 0; for (var k = 0; k < 4; k += 2) { while (i < m && this.data[i].type !== "mprescripts") { + var box = [null,null,null,null]; for (var j = k; j < k+2; j++) { if (this.data[i] && this.data[i].type !== "none") { if (!BOX[j]) { BOX[j] = HTMLCSS.createBox(stack); BOX[j].bbox = this.HTMLemptyBBox({}); if (W) {HTMLCSS.createBlank(BOX[j],W); BOX[j].bbox.w = BOX[j].bbox.rw = W} } - this.data[i].toHTML(BOX[j]); this.HTMLcombineBBoxes(this.data[i],BOX[j].bbox); + box[j] = this.data[i].toHTML(BOX[j]); } i++; } + var isPre = (k === 2); sub = BOX[k]; sup = BOX[k+1]; if (sub && sup) { - if (sub.bbox.w < sup.bbox.w) { - HTMLCSS.createBlank(sub,sup.bbox.w-sub.bbox.w); - sub.bbox.w = sup.bbox.w; sub.bbox.rw = Math.max(sub.bbox.w,sub.bbox.rw); - } else if (sub.bbox.w > sup.bbox.w) { - HTMLCSS.createBlank(sup,sub.bbox.w-sup.bbox.w); - sup.bbox.w = sub.bbox.w; sup.bbox.rw = Math.max(sup.bbox.w,sup.bbox.rw); + var w = box[k+1].bbox.w - box[k].bbox.w; + if (w > 0) { + if (isPre) { + box[k].style.paddingLeft = HTMLCSS.Em(w/box[k].scale); + BOX[k].w += w; + } else { + HTMLCSS.createBlank(sub,w); + } + } else if (w < 0) { + if (isPre) { + box[k+1].style.paddingLeft = HTMLCSS.Em(-w/box[k+1].scale); + BOX[k+1].w += -w; + } else { + HTMLCSS.createBlank(sup,-w); + } } + this.HTMLcombineBBoxes(box[k],sub.bbox); + this.HTMLcombineBBoxes(box[k+1],sup.bbox); + if (w > 0) { + sub.bbox.w = sup.bbox.w; + sub.bbox.rw = Math.max(sub.bbox.w,sub.bbox.rw); + } else if (w < 0) { + sup.bbox.w = sub.bbox.w; + sup.bbox.rw = Math.max(sup.bbox.w,sup.bbox.rw); + } + } else { + if (sub) this.HTMLcombineBBoxes(box[k],sub.bbox); + if (sup) this.HTMLcombineBBoxes(box[k+1],sup.bbox); } if (sub) {W = sub.bbox.w} else if (sup) {W = sup.bbox.w} } diff --git a/unpacked/jax/output/SVG/autoload/mmultiscripts.js b/unpacked/jax/output/SVG/autoload/mmultiscripts.js index ac2ea67d9..000a62e95 100644 --- a/unpacked/jax/output/SVG/autoload/mmultiscripts.js +++ b/unpacked/jax/output/SVG/autoload/mmultiscripts.js @@ -101,13 +101,18 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () { var i = 1, m = this.data.length, W = 0; for (var k = 0; k < 4; k += 2) { while (i < m && this.data[i].type !== "mprescripts") { + var box = [null,null,null,null]; for (var j = k; j < k+2; j++) { if (this.data[i] && this.data[i].type !== "none") { if (!BOX[j]) {BOX[j] = SVG.BBOX.G()} - BOX[j].Add(this.data[i].toSVG().With({x:W})); + box[j] = this.data[i].toSVG(); } i++; } + var isPre = (k === 2); + if (isPre) W += Math.max((box[k]||{w:0}).w,(box[k+1]||{w:0}).w); + if (box[k]) BOX[k].Add(box[k].With({x:W-(isPre?box[k].w:0)})); + if (box[k+1]) BOX[k+1].Add(box[k+1].With({x:W-(isPre?box[k+1].w:0)})); sub = BOX[k]||{w:0}; sup = BOX[k+1]||{w:0}; sub.w = sup.w = W = Math.max(sub.w,sup.w); }