Fix problem with potential infinite loop when an mspace is an embellished operator that causes a linebreak to occur. Also fix alignment problem in msubsup where svg.y wasn't taken into account (after a removeable group is removed). Might need similar treatment in moverunder and perhaps others as well. Issue #305.

This commit is contained in:
Davide P. Cervone 2012-09-09 00:19:35 -04:00
parent 3802fa337a
commit 064e053140
3 changed files with 20 additions and 29 deletions

View File

@ -478,7 +478,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
// //
if (!broken) {this.HTMLaddWidth(this.base,info,scanW)} if (!broken) {this.HTMLaddWidth(this.base,info,scanW)}
info.scanW += this.HTMLdw; info.W = info.scanW; info.scanW += this.HTMLdw; info.W = info.scanW;
info.index = index; if (better) {info.W = W; info.w = w} info.index = []; if (better) {info.W = W; info.w = w; info.index = index}
return better; return better;
}, },
@ -522,6 +522,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
// Override the method for checking line breaks to properly handle <mo> // Override the method for checking line breaks to properly handle <mo>
// //
HTMLbetterBreak: function (info,state) { HTMLbetterBreak: function (info,state) {
if (info.values && info.values.id === this.spanID) {return false}
var values = this.getValues( var values = this.getValues(
"linebreak","linebreakstyle","lineleading","linebreakmultchar", "linebreak","linebreakstyle","lineleading","linebreakmultchar",
"indentalign","indentshift", "indentalign","indentshift",
@ -577,6 +578,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
if (penalty >= info.penalty) {return false} if (penalty >= info.penalty) {return false}
info.penalty = penalty; info.values = values; info.W = W; info.w = w; info.penalty = penalty; info.values = values; info.W = W; info.w = w;
values.lineleading = HTMLCSS.length2em(values.lineleading,state.VALUES.lineleading); values.lineleading = HTMLCSS.length2em(values.lineleading,state.VALUES.lineleading);
values.id = this.spanID;
return true; return true;
} }
}); });
@ -588,6 +590,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
// Override the method for checking line breaks to properly handle <mspace> // Override the method for checking line breaks to properly handle <mspace>
// //
HTMLbetterBreak: function (info,state) { HTMLbetterBreak: function (info,state) {
if (info.values && info.values.id === this.spanID) {return false}
var values = this.getValues("linebreak"); var values = this.getValues("linebreak");
// //
// Get the default penalty for this location // Get the default penalty for this location
@ -617,7 +620,8 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
// //
if (penalty >= info.penalty) {return false} if (penalty >= info.penalty) {return false}
info.penalty = penalty; info.values = values; info.W = W; info.w = w; info.penalty = penalty; info.values = values; info.W = W; info.w = w;
values.lineleading = state.VALUES.lineleading; values.linebreakstyle = "before"; values.lineleading = state.VALUES.lineleading;
values.linebreakstyle = "before"; values.id = this.spanID;
return true; return true;
} }
}); });

View File

@ -219,7 +219,8 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// //
// Save the values needed for the future // Save the values needed for the future
// //
state.d = line.d; state.values = values; state.n++; state.d = line.d-(line.y||0);
state.values = values; state.n++;
}, },
/****************************************************************/ /****************************************************************/
@ -433,7 +434,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// //
if (!broken) {this.SVGaddWidth(this.base,info,scanW)} if (!broken) {this.SVGaddWidth(this.base,info,scanW)}
info.scanW += this.SVGdata.dw; info.W = info.scanW; info.scanW += this.SVGdata.dw; info.W = info.scanW;
info.index = index; if (better) {info.W = W; info.w = w} info.index = []; if (better) {info.W = W; info.w = w; info.index = index}
return better; return better;
}, },
@ -455,9 +456,9 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// base that has been removed. Remove the empty base box from the stack. // base that has been removed. Remove the empty base box from the stack.
// //
if (end.length === 0) { if (end.length === 0) {
var sup = this.data[this.sup], sub = this.data[this.sub], w = svg.w; var sup = this.data[this.sup], sub = this.data[this.sub], w = svg.w, data;
if (sup) {svg.Add(sup.toSVG(),w+(sup.SVGdata.dx||0),sup.SVGdata.dy)} if (sup) {data = sup.SVGdata; svg.Add(sup.toSVG(),w+(data.dx||0),data.dy)}
if (sub) {svg.Add(sub.toSVG(),w+(sub.SVGdata.dx||0),sub.SVGdata.dy)} if (sub) {data = sub.SVGdata; svg.Add(sub.toSVG(),w+(data.dx||0),data.dy)}
} }
} }
@ -470,6 +471,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// Override the method for checking line breaks to properly handle <mo> // Override the method for checking line breaks to properly handle <mo>
// //
SVGbetterBreak: function (info,state) { SVGbetterBreak: function (info,state) {
if (info.values && info.values.last === this) {return false}
var values = this.getValues( var values = this.getValues(
"linebreak","linebreakstyle","lineleading","linebreakmultchar", "linebreak","linebreakstyle","lineleading","linebreakmultchar",
"indentalign","indentshift", "indentalign","indentshift",
@ -524,6 +526,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
if (penalty >= info.penalty) {return false} if (penalty >= info.penalty) {return false}
info.penalty = penalty; info.values = values; info.W = W; info.w = w; info.penalty = penalty; info.values = values; info.W = W; info.w = w;
values.lineleading = SVG.length2em(values.lineleading,state.VALUES.lineleading); values.lineleading = SVG.length2em(values.lineleading,state.VALUES.lineleading);
values.last = this;
return true; return true;
} }
}); });
@ -535,6 +538,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// Override the method for checking line breaks to properly handle <mspace> // Override the method for checking line breaks to properly handle <mspace>
// //
SVGbetterBreak: function (info,state) { SVGbetterBreak: function (info,state) {
if (info.values && info.values.last === this) {return false}
var values = this.getValues("linebreak"); var values = this.getValues("linebreak");
// //
// Get the default penalty for this location // Get the default penalty for this location
@ -563,7 +567,8 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
// //
if (penalty >= info.penalty) {return false} if (penalty >= info.penalty) {return false}
info.penalty = penalty; info.values = values; info.W = W; info.w = w; info.penalty = penalty; info.values = values; info.W = W; info.w = w;
values.lineleading = state.VALUES.lineleading; values.linebreakstyle = "before"; values.lineleading = state.VALUES.lineleading;
values.linebreakstyle = "before"; values.last = this;
return true; return true;
} }
}); });
@ -592,24 +597,6 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
SVGmoveLine: function (start,end,svg,state,values) { SVGmoveLine: function (start,end,svg,state,values) {
return this.Core().SVGmoveSlice(start,end,svg,state,values); return this.Core().SVGmoveSlice(start,end,svg,state,values);
}, },
/*
* //
* // Split and move the hit boxes as well
* //
* SVGmoveSlice: function (start,end,svg,state,values,padding) {
* var hitbox = document.getElementById("MathJax-HitBox-"+this.spanID+SVG.idPostfix);
* if (hitbox) {hitbox.parentNode.removeChild(hitbox)}
* var slice = this.SUPER(arguments).SVGmoveSlice.apply(this,arguments);
* if (end.length === 0) {
* span = this.SVGspanElement(); var n = 0;
* while (span) {
* hitbox = this.SVGhandleHitBox(span,"-Continue-"+n);
* span = span.nextMathJaxSpan; n++;
* }
* }
* return slice;
* }
*/
}); });
// //

View File

@ -1811,7 +1811,7 @@
sub.w += s; sub.r = Math.max(sub.w,sub.r); sub.w += s; sub.r = Math.max(sub.w,sub.r);
} }
var q = SVG.TeX.sup_drop * sscale, r = SVG.TeX.sub_drop * sscale; var q = SVG.TeX.sup_drop * sscale, r = SVG.TeX.sub_drop * sscale;
var u = base.h - q, v = base.d + r, delta = 0, p; var u = base.h+(base.y||0) - q, v = base.d-(base.y||0) + r, delta = 0, p;
if (base.ic) { if (base.ic) {
base.w -= base.ic; // remove IC (added by mo and mi) base.w -= base.ic; // remove IC (added by mo and mi)
delta = 1.3*base.ic+.05; // adjust faked IC to be more in line with expeted results delta = 1.3*base.ic+.05; // adjust faked IC to be more in line with expeted results