From 332642c659741085da0a8586d772317703faabbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Mon, 25 Mar 2013 15:16:36 +0100 Subject: [PATCH] Fix processing errors with various table and menclose attributes. Issue #367. --- unpacked/MathJax.js | 8 +++++- .../jax/output/HTML-CSS/autoload/menclose.js | 2 +- .../jax/output/HTML-CSS/autoload/mtable.js | 28 ++++++++++++------- unpacked/jax/output/SVG/autoload/menclose.js | 4 ++- unpacked/jax/output/SVG/autoload/mtable.js | 26 ++++++++++------- 5 files changed, 45 insertions(+), 23 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 4dcc9121b..7468cc311 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -1732,7 +1732,13 @@ MathJax.Hub = { } }} return dst; - } + }, + + // Old browsers (e.g. Internet Explorer <= 8) do not support trim(). + SplitList: ("trim" in String.prototype ? + function (list) {return list.trim().split(/\s+/)} : + function (list) {return list.replace(/^\s+/,''). + replace(/\s+$/,'').split(/\s+/)}) }; MathJax.Hub.Insert(MathJax.Hub.config.styles,MathJax.Message.styles); MathJax.Hub.Insert(MathJax.Hub.config.styles,{".MathJax_Error":MathJax.Hub.config.errorSettings.style}); diff --git a/unpacked/jax/output/HTML-CSS/autoload/menclose.js b/unpacked/jax/output/HTML-CSS/autoload/menclose.js index 35ac3f0e7..4cd99016d 100644 --- a/unpacked/jax/output/HTML-CSS/autoload/menclose.js +++ b/unpacked/jax/output/HTML-CSS/autoload/menclose.js @@ -51,7 +51,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { var frame = HTMLCSS.createFrame(stack,H+D,0,W,t,"none"); frame.id = "MathJax-frame-"+this.spanID; HTMLCSS.addBox(stack,frame); stack.insertBefore(frame,base); // move base to above background - var notation = values.notation.split(/ /); + var notation = MathJax.Hub.SplitList(values.notation); var T = 0, B = 0, R = 0, L = 0, dx = 0, dy = 0; var svg, vml; var w, h, r; if (!values.mathcolor) {values.mathcolor = "black"} else {span.style.color = values.mathcolor} diff --git a/unpacked/jax/output/HTML-CSS/autoload/mtable.js b/unpacked/jax/output/HTML-CSS/autoload/mtable.js index 2e8b2dcf9..60ce1d51b 100644 --- a/unpacked/jax/output/HTML-CSS/autoload/mtable.js +++ b/unpacked/jax/output/HTML-CSS/autoload/mtable.js @@ -1,3 +1,5 @@ +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ /************************************************************* * * MathJax/jax/output/HTML-CSS/autoload/mtable.js @@ -93,13 +95,14 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { // // Determine spacing and alignment // - var CSPACE = values.columnspacing.split(/ /), - RSPACE = values.rowspacing.split(/ /), - CALIGN = values.columnalign.split(/ /), - RALIGN = values.rowalign.split(/ /), - CLINES = values.columnlines.split(/ /), - RLINES = values.rowlines.split(/ /), - CWIDTH = values.columnwidth.split(/ /), + var SPLIT = MathJax.Hub.SplitList; + var CSPACE = SPLIT(values.columnspacing), + RSPACE = SPLIT(values.rowspacing), + CALIGN = SPLIT(values.columnalign), + RALIGN = SPLIT(values.rowalign), + CLINES = SPLIT(values.columnlines), + RLINES = SPLIT(values.rowlines), + CWIDTH = SPLIT(values.columnwidth), RCALIGN = []; for (i = 0, m = CSPACE.length; i < m; i++) {CSPACE[i] = HTMLCSS.length2em(CSPACE[i],mu)} for (i = 0, m = RSPACE.length; i < m; i++) {RSPACE[i] = HTMLCSS.length2em(RSPACE[i],mu)} @@ -121,7 +124,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { row = this.data[i]; RCALIGN[i] = []; if (row.rowalign) {RALIGN[i] = row.rowalign} if (row.columnalign) { - RCALIGN[i] = row.columnalign.split(/ /); + RCALIGN[i] = SPLIT(row.columnalign); while (RCALIGN[i].length <= J) {RCALIGN[i].push(RCALIGN[i][RCALIGN[i].length-1])} } } @@ -149,8 +152,13 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { var fx = 0, fy = 0, fW, fH = HD; if (values.frame !== "none" || (values.columnlines+values.rowlines).match(/solid|dashed/)) { - fx = HTMLCSS.length2em(values.framespacing.split(/[, ]+/)[0],mu); - fy = HTMLCSS.length2em(values.framespacing.split(/[, ]+/)[1],mu); + var frameSpacing = SPLIT(values.framespacing); + if (frameSpacing.length != 2) { + // invalid attribute value: use the default. + frameSpacing = SPLIT(this.defaults.framespacing); + } + fx = HTMLCSS.length2em(frameSpacing[0],mu); + fy = HTMLCSS.length2em(frameSpacing[1],mu); fH = HD + 2*fy; // fW waits until stack.bbox.w is determined } // diff --git a/unpacked/jax/output/SVG/autoload/menclose.js b/unpacked/jax/output/SVG/autoload/menclose.js index 19b070ff3..e23498780 100644 --- a/unpacked/jax/output/SVG/autoload/menclose.js +++ b/unpacked/jax/output/SVG/autoload/menclose.js @@ -1,3 +1,5 @@ +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ /************************************************************* * * MathJax/jax/output/SVG/autoload/menclose.js @@ -108,7 +110,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () { var p = SVG.length2em(values.padding,mu,1/SVG.em) * scale; // padding for enclosure var t = SVG.length2em(values.thickness,mu,1/SVG.em); // thickness of lines (not scaled, see issue #414) var H = base.h+p+t, D = base.d+p+t, W = base.w+2*(p+t); - var notation = values.notation.split(/ /); + var notation = MathJax.Hub.SplitList(values.notation); var dx = 0, w, h, i, m, borders = [false,false,false,false]; if (!values.mathcolor) {values.mathcolor = "black"} diff --git a/unpacked/jax/output/SVG/autoload/mtable.js b/unpacked/jax/output/SVG/autoload/mtable.js index 5d1183f5f..f7648bb1f 100644 --- a/unpacked/jax/output/SVG/autoload/mtable.js +++ b/unpacked/jax/output/SVG/autoload/mtable.js @@ -91,13 +91,14 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () { // // Determine spacing and alignment // - var CSPACE = values.columnspacing.split(/ /), - RSPACE = values.rowspacing.split(/ /), - CALIGN = values.columnalign.split(/ /), - RALIGN = values.rowalign.split(/ /), - CLINES = values.columnlines.split(/ /), - RLINES = values.rowlines.split(/ /), - CWIDTH = values.columnwidth.split(/ /), + var SPLIT = MathJax.Hub.SplitList; + var CSPACE = SPLIT(values.columnspacing), + RSPACE = SPLIT(values.rowspacing), + CALIGN = SPLIT(values.columnalign), + RALIGN = SPLIT(values.rowalign), + CLINES = SPLIT(values.columnlines), + RLINES = SPLIT(values.rowlines), + CWIDTH = SPLIT(values.columnwidth), RCALIGN = []; for (i = 0, m = CSPACE.length; i < m; i++) {CSPACE[i] = SVG.length2em(CSPACE[i],mu)} for (i = 0, m = RSPACE.length; i < m; i++) {RSPACE[i] = SVG.length2em(RSPACE[i],mu)} @@ -119,7 +120,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () { row = this.data[i]; RCALIGN[i] = []; if (row.rowalign) {RALIGN[i] = row.rowalign} if (row.columnalign) { - RCALIGN[i] = row.columnalign.split(/ /); + RCALIGN[i] = SPLIT(row.columnalign); while (RCALIGN[i].length <= J) {RCALIGN[i].push(RCALIGN[i][RCALIGN[i].length-1])} } } @@ -148,8 +149,13 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () { var fx = 0, fy = 0, fW, fH = HD; if (values.frame !== "none" || (values.columnlines+values.rowlines).match(/solid|dashed/)) { - fx = SVG.length2em(values.framespacing.split(/[, ]+/)[0],mu); - fy = SVG.length2em(values.framespacing.split(/[, ]+/)[1],mu); + var frameSpacing = SPLIT(values.framespacing); + if (frameSpacing.length != 2) { + // invalid attribute value: use the default. + frameSpacing = SPLIT(this.defaults.framespacing); + } + fx = SVG.length2em(frameSpacing[0],mu); + fy = SVG.length2em(frameSpacing[1],mu); fH = HD + 2*fy; // fW waits until svg.w is determined } //