diff --git a/mathjax/extensions/mml2jax.js b/mathjax/extensions/mml2jax.js index 1533e82df..2e6c58cfe 100644 --- a/mathjax/extensions/mml2jax.js +++ b/mathjax/extensions/mml2jax.js @@ -13,6 +13,6 @@ */ MathJax.Unpack([ - ['MathJax.Extension.mml2jax','={varsion:"1.0.3",config:{element:null,preview:"alttext"},','MMLnamespace',':"http://www.w3.org/1998/Math/MathML",','PreProcess',':function(','e){if(!','this.configured','){','MathJax.Hub.','Insert(','this.config',',(',9,'config.','mml2jax||{}));if(',11,'.Augment','){',9,10,'this,',11,17,')}',7,'=true}if(typeof(e)==="string"){e=document.getElementById(e)}if(!e){e=',11,'.element||document.body}','this.ProcessMathArray(e.getElementsByTagName','("math"));if','(e.getElementsByTagNameNS','){this.','ProcessMathArray',31,'(this.',2,',"math"))}var d=document.getElementsByTagName("html")[0];if(d){for(var c=0,b=d.attributes.length;c=0;a--){','if(b[a].nodeName==="MATH"){this.','msieProcessMath','(b[a])}else{','this.ProcessMath(b[a','])}}}else{',51,55,'])}}}},ProcessMath',5,'e){var d','=e.parentNode;var a=document.createElement("script");a.type="math/mml";','d','.insertBefore(','a,e);if',35,'msieScriptBug','){var b=e.outerHTML;b=b.replace(/<\\?import .*?>/i,"").replace(/<\\?xml:namespace .*?\\/>/i,"");a.text=b.replace(/ /g," ");d.removeChild(e)}else{var ','c=MathJax.HTML.Element("span','");c.appendChild(e);MathJax.HTML.addText(a,c.innerHTML)}','if(this.config.preview!=="none"){this.createPreview(e,a)}},',53,5,'e){var c',62,'c',64,'a,e);var b="";while(e&&','e.nodeName','!=="/MATH"){if(',79,'==="#text"||',79,'==="#comment"){b+=e.nodeValue.replace(/&/g,"&").replace(//g,">")}else{b+=this.','toLowerCase','(e.outerHTML)}var d=e;e=e.nextSibling;d','.parentNode.removeChild(','d)}if(e&&',79,'==="/MATH"){e',87,'e)}a.text=b+"";',71,85,5,'b){var d=b.split(/"/);for(var c=0,a=d.length;c=0;a--){','if(b[a].nodeName==="MATH"){',8,'msieProcessMath','(b[a])}else{','this.ProcessMath(b[a','])}}}else{',64,69,'])}}}},ProcessMath',6,'e){var d','=e.parentNode;var a=document.createElement("script");a.type="math/mml";','d','.insertBefore(','a,e);if(',8,'msieScriptBug','){var b=',8,'msieOuterHTML','(e);b=b.replace(/<\\?import .*?>/i,"").replace(/<\\?xml:namespace .*?\\/>/i,"");a.text=b.replace(/ /g," ");d.removeChild(e)}else{var c=',0,'HTML.Element("span','");c.appendChild(e);',0,'HTML.addText(a,c.innerHTML)}','if(this.config.preview!=="none"){this.createPreview(e,a)}},',67,6,'e){var c',76,'c',78,'a,e);var b="",d;while','(e&&e.nodeName','!=="/MATH"){d=e;e=e.nextSibling;b+=','this.msieNodeHTML(d',');d','.parentNode.removeChild(','d)}if',99,'==="/MATH"){e',103,'e)}a.text=b+"";',91,'msieNodeHTML',6,'d){var c,b,a;if(','d.nodeName==="#','text"||',113,'comment"){c=d.','nodeValue.replace','(/&/g,"&").replace(//g,">")}else{if(',8,'msieAttributeBug','){c="<"+d.','nodeName.toLowerCase','();for(b=0,a=',46,'.length;b";return c},createPreview',6,'b,a){var c;if(',13,'.preview','==="alttext"){var d=b.getAttribute("alttext");if(d!=null){c=[',8,'filterText','(d)]}}else{if(',13,169,' instanceof Array){c=',13,169,'}}if(c){c=',0,87,'",{className',':',0,16,'preRemoveClass},c);a.parentNode',78,'c,a)}},',172,6,'a){return a},',28,':function(){',0,'Hub.Browser.Select({MSIE',6,'a',82,0,87,182,':"mathjax"});',0,12,0,1,',{',81,':true,',62,209,120,':(b.outerHTML.substr(12)!==\'"\')})}})}};',0,'Hub.Register.PreProcessor(["',5,'",',0,1,']);',0,'Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");'] ]); diff --git a/mathjax/unpacked/extensions/mml2jax.js b/mathjax/unpacked/extensions/mml2jax.js index 426ebc2eb..0dbc242cc 100644 --- a/mathjax/unpacked/extensions/mml2jax.js +++ b/mathjax/unpacked/extensions/mml2jax.js @@ -41,6 +41,7 @@ MathJax.Extension.mml2jax = { if (!this.configured) { MathJax.Hub.Insert(this.config,(MathJax.Hub.config.mml2jax||{})); if (this.config.Augment) {MathJax.Hub.Insert(this,this.config.Augment)} + this.InitBrowser(); this.configured = true; } if (typeof(element) === "string") {element = document.getElementById(element)} @@ -87,7 +88,7 @@ MathJax.Extension.mml2jax = { script.type = "math/mml"; parent.insertBefore(script,math); if (this.msieScriptBug) { - var html = math.outerHTML; + var html = this.msieOuterHTML(math); html = html.replace(/<\?import .*?>/i,"").replace(/<\?xml:namespace .*?\/>/i,""); script.text = html.replace(/ /g," "); parent.removeChild(math); @@ -103,23 +104,47 @@ MathJax.Extension.mml2jax = { var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math); - var mml = ""; + var mml = "", node; while (math && math.nodeName !== "/MATH") { - if (math.nodeName === "#text" || math.nodeName === "#comment") - {mml += math.nodeValue.replace(/&/g,"&").replace(//g,">")} - else {mml += this.toLowerCase(math.outerHTML)} - var node = math; - math = math.nextSibling; + node = math; math = math.nextSibling; + mml += this.msieNodeHTML(node); node.parentNode.removeChild(node); } if (math && math.nodeName === "/MATH") {math.parentNode.removeChild(math)} script.text = mml + ""; if (this.config.preview !== "none") {this.createPreview(math,script)} }, - toLowerCase: function (string) { - var parts = string.split(/"/); - for (var i = 0, m = parts.length; i < m; i += 2) {parts[i] = parts[i].toLowerCase()} - return parts.join('"'); + msieNodeHTML: function (node) { + var html, i, m; + if (node.nodeName === "#text" || node.nodeName === "#comment") + {html = node.nodeValue.replace(/&/g,"&").replace(//g,">")} + else if (this.msieAttributeBug) { + // In IE, outerHTML doesn't properly quote attributes, so quote them by hand + html = "<"+node.nodeName.toLowerCase(); + for (i = 0, m = node.attributes.length; i < m; i++) { + if (node.attributes[i].specified) { + html += " "+node.attributes[i].nodeName.toLowerCase()+"="; + html += '"'+node.attributes[i].nodeValue.replace(/\"/g,'\\"')+'"'; + } + } + html += ">"; + } else { + html = this.toLowerCase(node.outerHTML) + var parts = html.split(/"/); + for (i = 0, m = parts.length; i < m; i += 2) {parts[i] = parts[i].toLowerCase()} + html = parts.join('"'); + } + return html; + }, + msieOuterHTML: function (node) { + // IE's outerHTML doesn't properly quote + if (node.nodeName.charAt(0) === "#") {return this.msieNodeHTML(node)} + if (!this.msieAttributeBug) {return node.outerHTML} + var html = this.msieNodeHTML(node); + for (var i = 0, m = node.childNodes.length; i < m; i++) + {html += this.msieOuterHTML(node.childNodes[i])} + html += "" + return html; }, createPreview: function (math,script) { @@ -134,18 +159,23 @@ MathJax.Extension.mml2jax = { } }, - filterText: function (text) {return text} + filterText: function (text) {return text}, + + InitBrowser: function () { + MathJax.Hub.Browser.Select({ + MSIE: function (browser) { + var test = MathJax.HTML.Element("span",{className:"mathjax"}); + MathJax.Hub.Insert(MathJax.Extension.mml2jax,{ + msieScriptBug: true, + msieMathTagBug: true, + msieAttributeBug: (test.outerHTML.substr(12) !== '"') // attributes aren't quoted? + }) + } + }); + } }; -MathJax.Hub.Browser.Select({ - MSIE: function (browser) { - MathJax.Hub.Insert(MathJax.Extension.mml2jax,{ - msieScriptBug: true, - msieMathTagBug: true - }) - } -}); MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.mml2jax]); MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");