Math/modules/MathJax/jax/input/MathML/jax.js

17 lines
14 KiB
JavaScript
Raw Normal View History

/*
* /MathJax/jax/input/MathML/jax.js
*
* Copyright (c) 2012 Design Science, Inc.
*
* Part of the MathJax library.
* See http://www.mathjax.org for details.
*
* Licensed under the Apache License, Version 2.0;
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
(function(b,c){var a;b.Parse=MathJax.Object.Subclass({Init:function(d){this.Parse(d)},Parse:function(g){var h;if(typeof g!=="string"){h=g.parentNode}else{if(g.match(/^<[a-z]+:/i)&&!g.match(/^<[^<>]* xmlns:/)){g=g.replace(/^<([a-z]+)(:math)/i,'<$1$2 xmlns:$1="http://www.w3.org/1998/Math/MathML"')}var d=g.match(/^(<math( ('.*?'|".*?"|[^>])+)>)/i);if(d&&d[2].match(/ (?!xmlns=)[a-z]+=\"http:/i)){g=d[1].replace(/ (?!xmlns=)([a-z]+=(['"])http:.*?\2)/ig," xmlns:$1 $1")+g.substr(d[0].length)}g=g.replace(/^\s*(?:\/\/)?<!(--)?\[CDATA\[((.|\n)*)(\/\/)?\]\]\1>\s*$/,"$2");g=g.replace(/&([a-z][a-z0-9]*);/ig,this.replaceEntity);h=b.ParseXML(g);if(h==null){b.Error("Error parsing MathML")}}var f=h.getElementsByTagName("parsererror")[0];if(f){b.Error("Error parsing MathML: "+f.textContent.replace(/This page.*?errors:|XML Parsing Error: |Below is a rendering of the page.*/g,""))}if(h.childNodes.length!==1){b.Error("MathML must be formed by a single element")}if(h.firstChild.nodeName.toLowerCase()==="html"){var e=h.getElementsByTagName("h1")[0];if(e&&e.textContent==="XML parsing error"&&e.nextSibling){b.Error("Error parsing MathML: "+String(e.nextSibling.nodeValue).replace(/fatal parsing error: /,""))}}if(h.firstChild.nodeName.toLowerCase().replace(/^[a-z]+:/,"")!=="math"){b.Error("MathML must be formed by a <math> element, not <"+h.firstChild.nodeName+">")}this.mml=this.MakeMML(h.firstChild)},MakeMML:function(g){var h=String(g.getAttribute("class")||"");var e,f=g.nodeName.toLowerCase().replace(/^[a-z]+:/,"");var d=(h.match(/(^| )MJX-TeXAtom-([^ ]*)/));if(d){e=this.TeXAtom(d[2])}else{if(!(a[f]&&a[f].isa&&a[f].isa(a.mbase))){MathJax.Hub.signal.Post(["MathML Jax - unknown node type",f]);return a.merror("Unknown node type: "+f)}else{e=a[f]()}}this.AddAttributes(e,g);this.CheckClass(e,h);this.AddChildren(e,g);if(b.config.useMathMLspacing){e.useMMLspacing=8}return e},TeXAtom:function(e){var d=a.TeXAtom().With({texClass:a.TEXCLASS[e]});if(d.texClass===a.TEXCLASS.OP){d.movesupsub=d.movablelimits=true}return d},CheckClass:function(e,g){g=g.split(/ /);var h=[];for(var f=0,d=g.length;f<d;f++){if(g[f].substr(0,4)==="MJX-"){if(g[f]==="MJX-arrow"){e.arrow=true}else{if(g[f]==="MJX-variant"){e.variantForm=true;if(!MathJax.Extension["TeX/AMSsymbols"]){MathJax.Hub.RestartAfter(MathJax.Ajax.Require("[MathJax]/extensions/TeX/AMSsymbols.js"))}}else{if(g[f].substr(0,11)!=="MJX-TeXAtom"){e.mathvariant=g[f].substr(3);if(e.mathvariant==="-tex-caligraphic-bold"||e.mathvariant==="-tex-oldstyle-bold"){if(!MathJax.Extension["TeX/boldsymbol"]){MathJax.Hub.RestartAfter(MathJax.Ajax.Require("[MathJax]/extensions/TeX/boldsymbol.js"))}}}}}}else{h.push(g[f])}}if(h.length){e["class"]=h.join(" ")}else{delete e["class"]}},AddAttributes:function(f,h){f.attr={};f.attrNames=[];for(var g=0,d=h.attributes.length;g<d;g++){var e=h.attributes[g].name;if(e=="xlink:href"){e="href"}if(e.match(/:/)){continue}var j=h.attributes[g].value;if(j.toLowerCase()==="true"){j=true}else{if(j.toLowerCase()==="false"){j=false}}if(f.defaults[e]!=null||a.copyAttributes[e]){f[e]=j}else{f.attr[e]=j}f.attrNames.push(e)}},AddChildren:function(f,h){for(var g=0,d=h.childNodes.length;g<d;g++){var k=h.childNodes[g];if(k.nodeName==="#comment"){continue}if(k.nodeName==="#text"){if(f.isToken&&!f.mmlSelfClosing){var j=k.nodeValue.replace(/&([a-z][a-z0-9]*);/ig,this.replaceEntity);f.Append(a.chars(this.trimSpace(j)))}else{if(k.nodeValue.match(/\S/)){b.Error("Unexpected text node: '"+k.nodeValue+"'")}}}else{if(f.type==="annotation-xml"){f.Append(a.xml(k))}else{var e=this.MakeMML(k);f.Append(e);if(e.mmlSelfClosing&&e.data.length){f.Append.apply(f,e.data);e.data=[]}}}}},trimSpace:function(d){return d.replace(/[\t\n\r]/g," ").replace(/^ +/,"").replace(/ +$/,"").replace(/ +/g," ")},replaceEntity:function(f,e){if(e.match(/^(lt|amp|quot)$/)){return f}if(b.Parse.Entity[e]){return b.Parse.Entity[e]}var g=e.charAt(0).toLowerCase();var d=e.match(/^[a-zA-Z](fr|scr|opf)$/);if(d){g=d[1]}if(!b.Parse.loaded[g]){b.Parse.loaded[g]=true;MathJax.Hub.RestartAfter(MathJax.Ajax.Require(b.entityDir+"/"+g+".js"))}return f}},{loaded:[]});b