commit 935585bec73ce6edfe1b59c3132ed54a1c6d4532
parent 682fe27d7e4ee5598ec0332653badc3070b48cab
Author: Davide P. Cervone <dpvc@union.edu>
Date: Tue, 17 Jan 2012 10:36:13 -0500
New ASCIIMath input jax based on David Lippman's contributed versions
Diffstat:
6 files changed, 1604 insertions(+), 0 deletions(-)
diff --git a/extensions/asciimath2jax.js b/extensions/asciimath2jax.js
@@ -0,0 +1,16 @@
+/*
+ * /MathJax/extensions/asciimath2jax.js
+ *
+ * Copyright (c) 2010 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
+ */
+
+MathJax.Extension.asciimath2jax={version:"1.0",config:{delimiters:["`"],skipTags:["script","noscript","style","textarea","pre","code"],ignoreClass:"asciimath2jax_ignore",processClass:"asciimath2jax_process",preview:"AsciiMath"},PreProcess:function(a){if(!this.configured){this.config=MathJax.Hub.CombineConfig("asciimath2jax",this.config);if(this.config.Augment){MathJax.Hub.Insert(this,this.config.Augment)}this.configured=true}if(typeof(a)==="string"){a=document.getElementById(a)}if(!a){a=document.body}if(this.createPatterns()){this.scanElement(a,a.nextSibling)}},createPatterns:function(){var d=[],c,a,b=this.config;this.match={};if(b.delimiters.length===0){return false}for(c=0,a=b.delimiters.length;c<a;c++){d.push(this.patternQuote(b.delimiters[c]));this.match[b.delimiters[c]]={mode:"",end:b.delimiters[c],pattern:this.endPattern(b.delimiters[c])}}this.start=new RegExp(d.sort(this.sortLength).join("|"),"g");this.skipTags=new RegExp("^("+b.skipTags.join("|")+")$","i");this.ignoreClass=new RegExp("(^| )("+b.ignoreClass+")( |$)");this.processClass=new RegExp("(^| )("+b.processClass+")( |$)");return true},patternQuote:function(a){return a.replace(/([\^$(){}+*?\-|\[\]\:\\])/g,"\\$1")},endPattern:function(a){return new RegExp(this.patternQuote(a)+"|\\\\.","g")},sortLength:function(d,c){if(d.length!==c.length){return c.length-d.length}return(d==c?0:(d<c?-1:1))},scanElement:function(c,b,g){var a,e,d,f;while(c&&c!=b){if(c.nodeName.toLowerCase()==="#text"){if(!g){c=this.scanText(c)}}else{a=(typeof(c.className)==="undefined"?"":c.className);e=(typeof(c.tagName)==="undefined"?"":c.tagName);if(typeof(a)!=="string"){a=String(a)}f=this.processClass.exec(a);if(c.firstChild&&!a.match(/(^| )MathJax/)&&(f||!this.skipTags.exec(e))){d=(g||this.ignoreClass.exec(a))&&!f;this.scanElement(c.firstChild,b,d)}}if(c){c=c.nextSibling}}},scanText:function(b){if(b.nodeValue.replace(/\s+/,"")==""){return b}var a,c;this.search={start:true};this.pattern=this.start;while(b){this.pattern.lastIndex=0;while(b&&b.nodeName.toLowerCase()==="#text"&&(a=this.pattern.exec(b.nodeValue))){if(this.search.start){b=this.startMatch(a,b)}else{b=this.endMatch(a,b)}}if(this.search.matched){b=this.encloseMath(b)}if(b){do{c=b;b=b.nextSibling}while(b&&(b.nodeName.toLowerCase()==="br"||b.nodeName.toLowerCase()==="#comment"));if(!b||b.nodeName!=="#text"){return c}}}return b},startMatch:function(a,b){var c=this.match[a[0]];if(c!=null){this.search={end:c.end,mode:c.mode,open:b,olen:a[0].length,opos:this.pattern.lastIndex-a[0].length};this.switchPattern(c.pattern)}return b},endMatch:function(a,b){if(a[0]==this.search.end){this.search.close=b;this.search.cpos=this.pattern.lastIndex;this.search.clen=(this.search.isBeginEnd?0:a[0].length);this.search.matched=true;b=this.encloseMath(b);this.switchPattern(this.start)}return b},switchPattern:function(a){a.lastIndex=this.pattern.lastIndex;this.pattern=a;this.search.start=(a===this.start)},encloseMath:function(b){var a=this.search,f=a.close,e,c;if(a.cpos===f.length){f=f.nextSibling}else{f=f.splitText(a.cpos)}if(!f){e=f=MathJax.HTML.addText(a.close.parentNode,"")}a.close=f;c=(a.opos?a.open.splitText(a.opos):a.open);while(c.nextSibling&&c.nextSibling!==f){if(c.nextSibling.nodeValue!==null){if(c.nextSibling.nodeName==="#comment"){c.nodeValue+=c.nextSibling.nodeValue.replace(/^\[CDATA\[((.|\n|\r)*)\]\]$/,"$1")}else{c.nodeValue+=c.nextSibling.nodeValue}}else{if(this.msieNewlineBug){c.nodeValue+=(c.nextSibling.nodeName.toLowerCase()==="br"?"\n":" ")}else{c.nodeValue+=" "}}c.parentNode.removeChild(c.nextSibling)}var d=c.nodeValue.substr(a.olen,c.nodeValue.length-a.olen-a.clen);c.parentNode.removeChild(c);if(this.config.preview!=="none"){this.createPreview(a.mode,d)}c=this.createMathTag(a.mode,d);this.search={};this.pattern.lastIndex=0;if(e){e.parentNode.removeChild(e)}return c},insertNode:function(b){var a=this.search;a.close.parentNode.insertBefore(b,a.close)},createPreview:function(c,a){var b;if(this.config.preview==="AsciiMath"){b=[this.filterAM(a)]}else{if(this.config.preview instanceof Array){b=this.config.preview}}if(b){b=MathJax.HTML.Element("span",{className:MathJax.Hub.config.preRemoveClass},b);this.insertNode(b)}},createMathTag:function(c,a){var b=document.createElement("script");b.type="math/asciimath"+c;MathJax.HTML.setScript(b,a);this.insertNode(b);return b},filterAM:function(a){return a},msieNewlineBug:(MathJax.Hub.Browser.isMSIE&&(document.documentMode||0)<9)};MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.asciimath2jax]);MathJax.Ajax.loadComplete("[MathJax]/extensions/asciimath2jax.js");
+
diff --git a/jax/input/AsciiMath/config.js b/jax/input/AsciiMath/config.js
@@ -0,0 +1,16 @@
+/*
+ * /MathJax/jax/input/AsciiMath/config.js
+ *
+ * Copyright (c) 2010 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
+ */
+
+MathJax.InputJax.AsciiMath=MathJax.InputJax({id:"AsciiMath",version:"1.0",directory:MathJax.InputJax.directory+"/AsciiMath",extensionDir:MathJax.InputJax.extensionDir+"/AsciiMath",config:{displaystyle:true,decimal:"."}});MathJax.InputJax.AsciiMath.Register("math/asciimath");MathJax.InputJax.AsciiMath.loadComplete("config.js");
+
diff --git a/jax/input/AsciiMath/jax.js b/jax/input/AsciiMath/jax.js
@@ -0,0 +1,16 @@
+/*
+ * /MathJax/jax/input/AsciiMath/jax.js
+ *
+ * Copyright (c) 2010 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(ae){var j;var Z=MathJax.Object.Subclass({firstChild:null,lastChild:null,Init:function(){this.childNodes=[]},appendChild:function(ag){if(ag.parent){ag.parent.removeChild(ag)}if(this.lastChild){this.lastChild.nextSibling=ag}if(!this.firstChild){this.firstChild=ag}this.childNodes.push(ag);ag.parent=this;this.lastChild=ag;return ag},removeChild:function(ai){for(var ah=0,ag=this.childNodes.length;ah<ag;ah++){if(this.childNodes[ah]===ai){break}}if(ah===ag){return}this.childNodes.splice(ah,1);if(ai===this.firstChild){this.firstChild=ai.nextSibling}if(ai===this.lastChild){if(!this.childNodes.length){this.lastChild=null}else{this.lastChild=this.childNodes[this.childNodes.length-1]}}if(ah){this.childNodes[ah-1].nextSibling=ai.nextSibling}ai.nextSibling=ai.parent=null;return ai},replaceChild:function(aj,ah){for(var ai=0,ag=this.childNodes.length;ai<ag;ai++){if(this.childNodes[ai]===ah){break}}if(ai){this.childNodes[ai-1].nextSibling=aj}else{this.firstChild=aj}if(ai>=ag-1){this.lastChild=aj}this.childNodes[ai]=aj;aj.nextSibling=ah.nextSibling;ah.nextSibling=ah.parent=null;return ah}});var D=function(){j=MathJax.ElementJax.mml;var ag=j.mbase.prototype.Init;j.mbase.Augment({firstChild:null,lastChild:null,nodeValue:"",nextSibling:null,Init:function(){var ah=ag.apply(this,arguments)||this;ah.childNodes=ah.data;ah.nodeName=ah.type;return ah},appendChild:function(ak){if(ak.parent){ak.parent.removeChild(ak)}var ai=arguments;if(ak.isa(Z)){ai=ak.childNodes}for(var aj=0,ah=ai.length;aj<ah;aj++){ak=ai[aj];if(this.lastChild){this.lastChild.nextSibling=ak}if(!this.firstChild){this.firstChild=ak}this.Append(ak);this.lastChild=ak;this.nodeValue+=ak.nodeValue}return ak},removeChild:function(aj){for(var ai=0,ah=this.childNodes.length;ai<ah;ai++){if(this.childNodes[ai]===aj){break}}if(ai===ah){return}this.childNodes.splice(ai,1);if(aj===this.firstChild){this.firstChild=aj.nextSibling}if(aj===this.lastChild){if(!this.childNodes.length){this.lastChild=null}else{this.lastChild=this.childNodes[this.childNodes.length-1]}}if(ai){this.childNodes[ai-1].nextSibling=aj.nextSibling}this.nodeValue="";for(ai=0,ah=this.childNodes.length;ai<ah;ai++){this.nodeValue+=this.childNodes[ai].nodeValue}aj.nextSibling=aj.parent=null;return aj},replaceChild:function(ak,ai){for(var aj=0,ah=this.childNodes.length;aj<ah;aj++){if(this.childNodes[aj]===ai){break}}if(aj){this.childNodes[aj-1].nextSibling=ak}else{this.firstChild=ak}if(aj>=ah-1){this.lastChild=ak}this.SetData(aj,ak);ak.nextSibling=ai.nextSibling;this.nodeValue="";for(aj=0,ah=this.childNodes.length;aj<ah;aj++){this.nodeValue+=this.childNodes[aj].nodeValue}ai.nextSibling=ai.parent=null;return ai},setAttribute:function(ah,ai){this[ah]=ai}})};var R={};var g={getElementById:true,createElementNS:function(ah,ag){return j[ag]()},createTextNode:function(ag){return j.chars(ag).With({nodeValue:ag})},createDocumentFragment:function(){return Z()}};var N={appName:"MathJax"};var H="red";var ab="serif";var s=true;var B=true;var f=".";var p=g.createElementNS==null;function U(ag){if(p){return g.createElement(ag)}else{return g.createElementNS("http://www.w3.org/1999/xhtml",ag)}}var I=[61237,8492,61238,61239,8496,8497,61240,8459,8464,61241,61242,8466,8499,61243,61244,61245,61246,8475,61247,61248,61249,61250,61251,61252,61253,61254];var M=[61277,61278,8493,61279,61280,61281,61282,8460,8465,61283,61284,61285,61286,61287,61288,61289,61290,8476,61291,61292,61293,61294,61295,61296,61297,8488];var C=[61324,61325,8450,61326,61327,61328,61329,8461,61330,61331,61332,61333,61334,8469,61335,8473,8474,8477,61336,61337,61338,61339,61340,61341,61342,8484];var d=0,G=1,W=2,l=3,b=4,k=5,a=6,O=7,Y=8,q=9,aa=10;var i={input:"sqrt",tag:"msqrt",output:"sqrt",tex:null,ttype:G},ad={input:"root",tag:"mroot",output:"root",tex:null,ttype:W},z={input:"frac",tag:"mfrac",output:"/",tex:null,ttype:W},P={input:"/",tag:"mfrac",output:"/",tex:null,ttype:l},n={input:"stackrel",tag:"mover",output:"stackrel",tex:null,ttype:W},r={input:"_",tag:"msub",output:"_",tex:null,ttype:l},h={input:"^",tag:"msup",output:"^",tex:null,ttype:l},af={input:"text",tag:"mtext",output:"text",tex:null,ttype:aa},w={input:"mbox",tag:"mtext",output:"mbox",tex:null,ttype:aa},o={input:'"',tag:"mtext",output:"mbox",tex:null,ttype:aa};var F=[{input:"alpha",tag:"mi",output:"\u03B1",tex:null,ttype:d},{input:"beta",tag:"mi",output:"\u03B2",tex:null,ttype:d},{input:"chi",tag:"mi",output:"\u03C7",tex:null,ttype:d},{input:"delta",tag:"mi",output:"\u03B4",tex:null,ttype:d},{input:"Delta",tag:"mo",output:"\u0394",tex:null,ttype:d},{input:"epsi",tag:"mi",output:"\u03B5",tex:"epsilon",ttype:d},{input:"varepsilon",tag:"mi",output:"\u025B",tex:null,ttype:d},{input:"eta",tag:"mi",output:"\u03B7",tex:null,ttype:d},{input:"gamma",tag:"mi",output:"\u03B3",tex:null,ttype:d},{input:"Gamma",tag:"mo",output:"\u0393",tex:null,ttype:d},{input:"iota",tag:"mi",output:"\u03B9",tex:null,ttype:d},{input:"kappa",tag:"mi",output:"\u03BA",tex:null,ttype:d},{input:"lambda",tag:"mi",output:"\u03BB",tex:null,ttype:d},{input:"Lambda",tag:"mo",output:"\u039B",tex:null,ttype:d},{input:"mu",tag:"mi",output:"\u03BC",tex:null,ttype:d},{input:"nu",tag:"mi",output:"\u03BD",tex:null,ttype:d},{input:"omega",tag:"mi",output:"\u03C9",tex:null,ttype:d},{input:"Omega",tag:"mo",output:"\u03A9",tex:null,ttype:d},{input:"phi",tag:"mi",output:"\u03C6",tex:null,ttype:d},{input:"varphi",tag:"mi",output:"\u03D5",tex:null,ttype:d},{input:"Phi",tag:"mo",output:"\u03A6",tex:null,ttype:d},{input:"pi",tag:"mi",output:"\u03C0",tex:null,ttype:d},{input:"Pi",tag:"mo",output:"\u03A0",tex:null,ttype:d},{input:"psi",tag:"mi",output:"\u03C8",tex:null,ttype:d},{input:"Psi",tag:"mi",output:"\u03A8",tex:null,ttype:d},{input:"rho",tag:"mi",output:"\u03C1",tex:null,ttype:d},{input:"sigma",tag:"mi",output:"\u03C3",tex:null,ttype:d},{input:"Sigma",tag:"mo",output:"\u03A3",tex:null,ttype:d},{input:"tau",tag:"mi",output:"\u03C4",tex:null,ttype:d},{input:"theta",tag:"mi",output:"\u03B8",tex:null,ttype:d},{input:"vartheta",tag:"mi",output:"\u03D1",tex:null,ttype:d},{input:"Theta",tag:"mo",output:"\u0398",tex:null,ttype:d},{input:"upsilon",tag:"mi",output:"\u03C5",tex:null,ttype:d},{input:"xi",tag:"mi",output:"\u03BE",tex:null,ttype:d},{input:"Xi",tag:"mo",output:"\u039E",tex:null,ttype:d},{input:"zeta",tag:"mi",output:"\u03B6",tex:null,ttype:d},{input:"*",tag:"mo",output:"\u22C5",tex:"cdot",ttype:d},{input:"**",tag:"mo",output:"\u22C6",tex:"star",ttype:d},{input:"//",tag:"mo",output:"/",tex:null,ttype:d},{input:"\\\\",tag:"mo",output:"\\",tex:"backslash",ttype:d},{input:"setminus",tag:"mo",output:"\\",tex:null,ttype:d},{input:"xx",tag:"mo",output:"\u00D7",tex:"times",ttype:d},{input:"-:",tag:"mo",output:"\u00F7",tex:"divide",ttype:d},{input:"@",tag:"mo",output:"\u2218",tex:"circ",ttype:d},{input:"o+",tag:"mo",output:"\u2295",tex:"oplus",ttype:d},{input:"ox",tag:"mo",output:"\u2297",tex:"otimes",ttype:d},{input:"o.",tag:"mo",output:"\u2299",tex:"odot",ttype:d},{input:"sum",tag:"mo",output:"\u2211",tex:null,ttype:O},{input:"prod",tag:"mo",output:"\u220F",tex:null,ttype:O},{input:"^^",tag:"mo",output:"\u2227",tex:"wedge",ttype:d},{input:"^^^",tag:"mo",output:"\u22C0",tex:"bigwedge",ttype:O},{input:"vv",tag:"mo",output:"\u2228",tex:"vee",ttype:d},{input:"vvv",tag:"mo",output:"\u22C1",tex:"bigvee",ttype:O},{input:"nn",tag:"mo",output:"\u2229",tex:"cap",ttype:d},{input:"nnn",tag:"mo",output:"\u22C2",tex:"bigcap",ttype:O},{input:"uu",tag:"mo",output:"\u222A",tex:"cup",ttype:d},{input:"uuu",tag:"mo",output:"\u22C3",tex:"bigcup",ttype:O},{input:"!=",tag:"mo",output:"\u2260",tex:"ne",ttype:d},{input:":=",tag:"mo",output:":=",tex:null,ttype:d},{input:"lt",tag:"mo",output:"<",tex:null,ttype:d},{input:"<=",tag:"mo",output:"\u2264",tex:"le",ttype:d},{input:"lt=",tag:"mo",output:"\u2264",tex:"leq",ttype:d},{input:">=",tag:"mo",output:"\u2265",tex:"ge",ttype:d},{input:"geq",tag:"mo",output:"\u2265",tex:null,ttype:d},{input:"-<",tag:"mo",output:"\u227A",tex:"prec",ttype:d},{input:"-lt",tag:"mo",output:"\u227A",tex:null,ttype:d},{input:">-",tag:"mo",output:"\u227B",tex:"succ",ttype:d},{input:"in",tag:"mo",output:"\u2208",tex:null,ttype:d},{input:"!in",tag:"mo",output:"\u2209",tex:"notin",ttype:d},{input:"sub",tag:"mo",output:"\u2282",tex:"subset",ttype:d},{input:"sup",tag:"mo",output:"\u2283",tex:"supset",ttype:d},{input:"sube",tag:"mo",output:"\u2286",tex:"subseteq",ttype:d},{input:"supe",tag:"mo",output:"\u2287",tex:"supseteq",ttype:d},{input:"-=",tag:"mo",output:"\u2261",tex:"equiv",ttype:d},{input:"~=",tag:"mo",output:"\u2245",tex:"cong",ttype:d},{input:"~~",tag:"mo",output:"\u2248",tex:"approx",ttype:d},{input:"prop",tag:"mo",output:"\u221D",tex:"propto",ttype:d},{input:"and",tag:"mtext",output:"and",tex:null,ttype:a},{input:"or",tag:"mtext",output:"or",tex:null,ttype:a},{input:"not",tag:"mo",output:"\u00AC",tex:"neg",ttype:d},{input:"=>",tag:"mo",output:"\u21D2",tex:"implies",ttype:d},{input:"if",tag:"mo",output:"if",tex:null,ttype:a},{input:"<=>",tag:"mo",output:"\u21D4",tex:"iff",ttype:d},{input:"AA",tag:"mo",output:"\u2200",tex:"forall",ttype:d},{input:"EE",tag:"mo",output:"\u2203",tex:"exists",ttype:d},{input:"_|_",tag:"mo",output:"\u22A5",tex:"bot",ttype:d},{input:"TT",tag:"mo",output:"\u22A4",tex:"top",ttype:d},{input:"|--",tag:"mo",output:"\u22A2",tex:"vdash",ttype:d},{input:"|==",tag:"mo",output:"\u22A8",tex:"models",ttype:d},{input:"(",tag:"mo",output:"(",tex:null,ttype:b},{input:")",tag:"mo",output:")",tex:null,ttype:k},{input:"[",tag:"mo",output:"[",tex:null,ttype:b},{input:"]",tag:"mo",output:"]",tex:null,ttype:k},{input:"{",tag:"mo",output:"{",tex:null,ttype:b},{input:"}",tag:"mo",output:"}",tex:null,ttype:k},{input:"|",tag:"mo",output:"|",tex:null,ttype:q},{input:"(:",tag:"mo",output:"\u2329",tex:"langle",ttype:b},{input:":)",tag:"mo",output:"\u232A",tex:"rangle",ttype:k},{input:"<<",tag:"mo",output:"\u2329",tex:null,ttype:b},{input:">>",tag:"mo",output:"\u232A",tex:null,ttype:k},{input:"{:",tag:"mo",output:"{:",tex:null,ttype:b,invisible:true},{input:":}",tag:"mo",output:":}",tex:null,ttype:k,invisible:true},{input:"int",tag:"mo",output:"\u222B",tex:null,ttype:d},{input:"dx",tag:"mi",output:"{:d x:}",tex:null,ttype:Y},{input:"dy",tag:"mi",output:"{:d y:}",tex:null,ttype:Y},{input:"dz",tag:"mi",output:"{:d z:}",tex:null,ttype:Y},{input:"dt",tag:"mi",output:"{:d t:}",tex:null,ttype:Y},{input:"oint",tag:"mo",output:"\u222E",tex:null,ttype:d},{input:"del",tag:"mo",output:"\u2202",tex:"partial",ttype:d},{input:"grad",tag:"mo",output:"\u2207",tex:"nabla",ttype:d},{input:"+-",tag:"mo",output:"\u00B1",tex:"pm",ttype:d},{input:"O/",tag:"mo",output:"\u2205",tex:"emptyset",ttype:d},{input:"oo",tag:"mo",output:"\u221E",tex:"infty",ttype:d},{input:"aleph",tag:"mo",output:"\u2135",tex:null,ttype:d},{input:"...",tag:"mo",output:"...",tex:"ldots",ttype:d},{input:":.",tag:"mo",output:"\u2234",tex:"therefore",ttype:d},{input:"/_",tag:"mo",output:"\u2220",tex:"angle",ttype:d},{input:"\\ ",tag:"mo",output:"\u00A0",tex:null,ttype:d},{input:"quad",tag:"mo",output:"\u00A0\u00A0",tex:null,ttype:d},{input:"qquad",tag:"mo",output:"\u00A0\u00A0\u00A0\u00A0",tex:null,ttype:d},{input:"cdots",tag:"mo",output:"\u22EF",tex:null,ttype:d},{input:"vdots",tag:"mo",output:"\u22EE",tex:null,ttype:d},{input:"ddots",tag:"mo",output:"\u22F1",tex:null,ttype:d},{input:"diamond",tag:"mo",output:"\u22C4",tex:null,ttype:d},{input:"square",tag:"mo",output:"\u25A1",tex:null,ttype:d},{input:"|__",tag:"mo",output:"\u230A",tex:"lfloor",ttype:d},{input:"__|",tag:"mo",output:"\u230B",tex:"rfloor",ttype:d},{input:"|~",tag:"mo",output:"\u2308",tex:"lceiling",ttype:d},{input:"~|",tag:"mo",output:"\u2309",tex:"rceiling",ttype:d},{input:"CC",tag:"mo",output:"\u2102",tex:null,ttype:d},{input:"NN",tag:"mo",output:"\u2115",tex:null,ttype:d},{input:"QQ",tag:"mo",output:"\u211A",tex:null,ttype:d},{input:"RR",tag:"mo",output:"\u211D",tex:null,ttype:d},{input:"ZZ",tag:"mo",output:"\u2124",tex:null,ttype:d},{input:"f",tag:"mi",output:"f",tex:null,ttype:G,func:true},{input:"g",tag:"mi",output:"g",tex:null,ttype:G,func:true},{input:"lim",tag:"mo",output:"lim",tex:null,ttype:O},{input:"Lim",tag:"mo",output:"Lim",tex:null,ttype:O},{input:"sin",tag:"mo",output:"sin",tex:null,ttype:G,func:true},{input:"cos",tag:"mo",output:"cos",tex:null,ttype:G,func:true},{input:"tan",tag:"mo",output:"tan",tex:null,ttype:G,func:true},{input:"sinh",tag:"mo",output:"sinh",tex:null,ttype:G,func:true},{input:"cosh",tag:"mo",output:"cosh",tex:null,ttype:G,func:true},{input:"tanh",tag:"mo",output:"tanh",tex:null,ttype:G,func:true},{input:"cot",tag:"mo",output:"cot",tex:null,ttype:G,func:true},{input:"sec",tag:"mo",output:"sec",tex:null,ttype:G,func:true},{input:"csc",tag:"mo",output:"csc",tex:null,ttype:G,func:true},{input:"log",tag:"mo",output:"log",tex:null,ttype:G,func:true},{input:"ln",tag:"mo",output:"ln",tex:null,ttype:G,func:true},{input:"det",tag:"mo",output:"det",tex:null,ttype:G,func:true},{input:"dim",tag:"mo",output:"dim",tex:null,ttype:d},{input:"mod",tag:"mo",output:"mod",tex:null,ttype:d},{input:"gcd",tag:"mo",output:"gcd",tex:null,ttype:G,func:true},{input:"lcm",tag:"mo",output:"lcm",tex:null,ttype:G,func:true},{input:"lub",tag:"mo",output:"lub",tex:null,ttype:d},{input:"glb",tag:"mo",output:"glb",tex:null,ttype:d},{input:"min",tag:"mo",output:"min",tex:null,ttype:O},{input:"max",tag:"mo",output:"max",tex:null,ttype:O},{input:"uarr",tag:"mo",output:"\u2191",tex:"uparrow",ttype:d},{input:"darr",tag:"mo",output:"\u2193",tex:"downarrow",ttype:d},{input:"rarr",tag:"mo",output:"\u2192",tex:"rightarrow",ttype:d},{input:"->",tag:"mo",output:"\u2192",tex:"to",ttype:d},{input:"|->",tag:"mo",output:"\u21A6",tex:"mapsto",ttype:d},{input:"larr",tag:"mo",output:"\u2190",tex:"leftarrow",ttype:d},{input:"harr",tag:"mo",output:"\u2194",tex:"leftrightarrow",ttype:d},{input:"rArr",tag:"mo",output:"\u21D2",tex:"Rightarrow",ttype:d},{input:"lArr",tag:"mo",output:"\u21D0",tex:"Leftarrow",ttype:d},{input:"hArr",tag:"mo",output:"\u21D4",tex:"Leftrightarrow",ttype:d},i,ad,z,P,n,r,h,{input:"hat",tag:"mover",output:"\u005E",tex:null,ttype:G,acc:true},{input:"bar",tag:"mover",output:"\u00AF",tex:"overline",ttype:G,acc:true},{input:"vec",tag:"mover",output:"\u2192",tex:null,ttype:G,acc:true},{input:"dot",tag:"mover",output:".",tex:null,ttype:G,acc:true},{input:"ddot",tag:"mover",output:"..",tex:null,ttype:G,acc:true},{input:"ul",tag:"munder",output:"\u0332",tex:"underline",ttype:G,acc:true},af,w,o,{input:"bb",tag:"mstyle",atname:"fontweight",atval:"bold",output:"bb",tex:null,ttype:G},{input:"mathbf",tag:"mstyle",atname:"fontweight",atval:"bold",output:"mathbf",tex:null,ttype:G},{input:"sf",tag:"mstyle",atname:"fontfamily",atval:"sans-serif",output:"sf",tex:null,ttype:G},{input:"mathsf",tag:"mstyle",atname:"fontfamily",atval:"sans-serif",output:"mathsf",tex:null,ttype:G},{input:"bbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"bbb",tex:null,ttype:G,codes:C},{input:"mathbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"mathbb",tex:null,ttype:G,codes:C},{input:"cc",tag:"mstyle",atname:"mathvariant",atval:"script",output:"cc",tex:null,ttype:G,codes:I},{input:"mathcal",tag:"mstyle",atname:"mathvariant",atval:"script",output:"mathcal",tex:null,ttype:G,codes:I},{input:"tt",tag:"mstyle",atname:"fontfamily",atval:"monospace",output:"tt",tex:null,ttype:G},{input:"mathtt",tag:"mstyle",atname:"fontfamily",atval:"monospace",output:"mathtt",tex:null,ttype:G},{input:"fr",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"fr",tex:null,ttype:G,codes:M},{input:"mathfrak",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"mathfrak",tex:null,ttype:G,codes:M}];function V(ah,ag){if(ah.input>ag.input){return 1}else{return -1}}var T=[];function u(){var ah=[],ag;for(ag=0;ag<F.length;ag++){if(F[ag].tex){ah[ah.length]={input:F[ag].tex,tag:F[ag].tag,output:F[ag].output,ttype:F[ag].ttype}}}F=F.concat(ah);F.sort(V);for(ag=0;ag<F.length;ag++){T[ag]=F[ag].input}}var X="http://www.w3.org/1998/Math/MathML";function Q(ag){if(p){return g.createElement("m:"+ag)}else{return g.createElementNS(X,ag)}}function L(ag,ai){if(p){var ah=g.createElement("m:"+ag)}else{ah=g.createElementNS(X,ag)}ah.appendChild(ai);return ah}function A(ag,ah){F=F.concat([{input:ag,tag:"mo",output:ah,tex:null,ttype:Y}])}function t(ai,aj){var ag;if(ai.charAt(aj)=="\\"&&ai.charAt(aj+1)!="\\"&&ai.charAt(aj+1)!=" "){ag=ai.slice(aj+1)}else{ag=ai.slice(aj)}for(var ah=0;ah<ag.length&&ag.charCodeAt(ah)<=32;ah=ah+1){}return ag.slice(ah)}function c(ah,ak,al){if(al==0){var aj,ag;al=-1;aj=ah.length;while(al+1<aj){ag=(al+aj)>>1;if(ah[ag]<ak){al=ag}else{aj=ag}}return aj}else{for(var ai=al;ai<ah.length&&ah[ai]<ak;ai++){}}return ai}function m(am){var ag=0;var ah=0;var aj;var ap;var ao;var ak="";var al=true;for(var ai=1;ai<=am.length&&al;ai++){ap=am.slice(0,ai);ah=ag;ag=c(T,ap,ah);if(ag<T.length&&am.slice(0,T[ag].length)==T[ag]){ak=T[ag];aj=ag;ai=ak.length}al=ag<T.length&&am.slice(0,T[ag].length)>=T[ag]}x=E;if(ak!=""){E=F[aj].ttype;return F[aj]}E=d;ag=1;ap=am.slice(0,1);var an=true;while("0"<=ap&&ap<="9"&&ag<=am.length){ap=am.slice(ag,ag+1);ag++}if(ap==f){ap=am.slice(ag,ag+1);if("0"<=ap&&ap<="9"){an=false;ag++;while("0"<=ap&&ap<="9"&&ag<=am.length){ap=am.slice(ag,ag+1);ag++}}}if((an&&ag>1)||ag>2){ap=am.slice(0,ag-1);ao="mn"}else{ag=2;ap=am.slice(0,1);ao=(("A">ap||ap>"Z")&&("a">ap||ap>"z")?"mo":"mi")}if(ap=="-"&&x==l){return{input:ap,tag:ao,output:ap,ttype:G,func:true}}return{input:ap,tag:ao,output:ap,ttype:d}}function S(ah){var ag;if(ah.nodeName=="mrow"){ag=ah.firstChild.firstChild.nodeValue;if(ag=="("||ag=="["||ag=="{"){ah.removeChild(ah.firstChild)}}if(ah.nodeName=="mrow"){ag=ah.lastChild.firstChild.nodeValue;if(ag==")"||ag=="]"||ag=="}"){ah.removeChild(ah.lastChild)}}}var J,x,E;function K(am){var ai,ah,ap,ak,ao,al=g.createDocumentFragment();am=t(am,0);ai=m(am);if(ai==null||ai.ttype==k&&J>0){return[null,am]}if(ai.ttype==Y){am=ai.output+t(am,ai.input.length);ai=m(am)}switch(ai.ttype){case O:case d:am=t(am,ai.input.length);return[L(ai.tag,g.createTextNode(ai.output)),am];case b:J++;am=t(am,ai.input.length);ap=v(am,true);J--;if(typeof ai.invisible=="boolean"&&ai.invisible){ah=L("mrow",ap[0])}else{ah=L("mo",g.createTextNode(ai.output));ah=L("mrow",ah);ah.appendChild(ap[0])}return[ah,ap[1]];case aa:if(ai!=o){am=t(am,ai.input.length)}if(am.charAt(0)=="{"){ak=am.indexOf("}")}else{if(am.charAt(0)=="("){ak=am.indexOf(")")}else{if(am.charAt(0)=="["){ak=am.indexOf("]")}else{if(ai==o){ak=am.slice(1).indexOf('"')+1}else{ak=0}}}}if(ak==-1){ak=am.length}ao=am.slice(1,ak);if(ao.charAt(0)==" "){ah=Q("mspace");ah.setAttribute("width","1ex");al.appendChild(ah)}al.appendChild(L(ai.tag,g.createTextNode(ao)));if(ao.charAt(ao.length-1)==" "){ah=Q("mspace");ah.setAttribute("width","1ex");al.appendChild(ah)}am=t(am,ak+1);return[L("mrow",al),am];case G:am=t(am,ai.input.length);ap=K(am);if(ap[0]==null){return[L(ai.tag,g.createTextNode(ai.output)),am]}if(typeof ai.func=="boolean"&&ai.func){ao=am.charAt(0);if(ao=="^"||ao=="_"||ao=="/"||ao=="|"||ao==","){return[L(ai.tag,g.createTextNode(ai.output)),am]}else{ah=L("mrow",L(ai.tag,g.createTextNode(ai.output)));ah.appendChild(ap[0]);return[ah,ap[1]]}}S(ap[0]);if(ai.input=="sqrt"){return[L(ai.tag,ap[0]),ap[1]]}else{if(typeof ai.acc=="boolean"&&ai.acc){ah=L(ai.tag,ap[0]);ah.appendChild(L("mo",g.createTextNode(ai.output)));return[ah,ap[1]]}else{if(!p&&typeof ai.codes!="undefined"){for(ak=0;ak<ap[0].childNodes.length;ak++){if(ap[0].childNodes[ak].nodeName=="mi"||ap[0].nodeName=="mi"){ao=(ap[0].nodeName=="mi"?ap[0].firstChild.nodeValue:ap[0].childNodes[ak].firstChild.nodeValue);var an=[];for(var aj=0;aj<ao.length;aj++){if(ao.charCodeAt(aj)>64&&ao.charCodeAt(aj)<91){an=an+String.fromCharCode(ai.codes[ao.charCodeAt(aj)-65])}else{an=an+ao.charAt(aj)}}if(ap[0].nodeName=="mi"){ap[0]=Q("mo").appendChild(g.createTextNode(an))}else{ap[0].replaceChild(Q("mo").appendChild(g.createTextNode(an)),ap[0].childNodes[ak])}}}}ah=L(ai.tag,ap[0]);ah.setAttribute(ai.atname,ai.atval);return[ah,ap[1]]}}case W:am=t(am,ai.input.length);ap=K(am);if(ap[0]==null){return[L("mo",g.createTextNode(ai.input)),am]}S(ap[0]);var ag=K(ap[1]);if(ag[0]==null){return[L("mo",g.createTextNode(ai.input)),am]}S(ag[0]);if(ai.input=="root"||ai.input=="stackrel"){al.appendChild(ag[0])}al.appendChild(ap[0]);if(ai.input=="frac"){al.appendChild(ag[0])}return[L(ai.tag,al),ag[1]];case l:am=t(am,ai.input.length);return[L("mo",g.createTextNode(ai.output)),am];case a:am=t(am,ai.input.length);ah=Q("mspace");ah.setAttribute("width","1ex");al.appendChild(ah);al.appendChild(L(ai.tag,g.createTextNode(ai.output)));ah=Q("mspace");ah.setAttribute("width","1ex");al.appendChild(ah);return[L("mrow",al),am];case q:J++;am=t(am,ai.input.length);ap=v(am,false);J--;ao="";if(ap[0].lastChild!=null){ao=ap[0].lastChild.firstChild.nodeValue}if(ao=="|"){ah=L("mo",g.createTextNode(ai.output));ah=L("mrow",ah);ah.appendChild(ap[0]);return[ah,ap[1]]}else{ah=L("mo",g.createTextNode(ai.output));ah=L("mrow",ah);return[ah,am]}default:am=t(am,ai.input.length);return[L(ai.tag,g.createTextNode(ai.output)),am]}}function y(am){var ak,an,al,aj,ag,ai;am=t(am,0);an=m(am);ag=K(am);aj=ag[0];am=ag[1];ak=m(am);if(ak.ttype==l&&ak.input!="/"){am=t(am,ak.input.length);ag=K(am);if(ag[0]==null){ag[0]=L("mo",g.createTextNode("\u25A1"))}else{S(ag[0])}am=ag[1];if(ak.input=="_"){al=m(am);ai=(an.ttype==O);if(al.input=="^"){am=t(am,al.input.length);var ah=K(am);S(ah[0]);am=ah[1];aj=L((ai?"munderover":"msubsup"),aj);aj.appendChild(ag[0]);aj.appendChild(ah[0]);aj=L("mrow",aj)}else{aj=L((ai?"munder":"msub"),aj);aj.appendChild(ag[0])}}else{aj=L(ak.tag,aj);aj.appendChild(ag[0])}}return[aj,am]}function v(ao,an){var at,ap,ak,aw,al=g.createDocumentFragment();do{ao=t(ao,0);ak=y(ao);ap=ak[0];ao=ak[1];at=m(ao);if(at.ttype==l&&at.input=="/"){ao=t(ao,at.input.length);ak=y(ao);if(ak[0]==null){ak[0]=L("mo",g.createTextNode("\u25A1"))}else{S(ak[0])}ao=ak[1];S(ap);ap=L(at.tag,ap);ap.appendChild(ak[0]);al.appendChild(ap);at=m(ao)}else{if(ap!=undefined){al.appendChild(ap)}}}while((at.ttype!=k&&(at.ttype!=q||an)||J==0)&&at!=null&&at.output!="");if(at.ttype==k||at.ttype==q){var ax=al.childNodes.length;if(ax>0&&al.childNodes[ax-1].nodeName=="mrow"&&ax>1&&al.childNodes[ax-2].nodeName=="mo"&&al.childNodes[ax-2].firstChild.nodeValue==","){var az=al.childNodes[ax-1].lastChild.firstChild.nodeValue;if(az==")"||az=="]"){var ah=al.childNodes[ax-1].firstChild.firstChild.nodeValue;if(ah=="("&&az==")"&&at.output!="}"||ah=="["&&az=="]"){var ai=[];var au=true;var aq=al.childNodes.length;for(aw=0;au&&aw<aq;aw=aw+2){ai[aw]=[];ap=al.childNodes[aw];if(au){au=ap.nodeName=="mrow"&&(aw==aq-1||ap.nextSibling.nodeName=="mo"&&ap.nextSibling.firstChild.nodeValue==",")&&ap.firstChild.firstChild.nodeValue==ah&&ap.lastChild.firstChild.nodeValue==az}if(au){for(var av=0;av<ap.childNodes.length;av++){if(ap.childNodes[av].firstChild.nodeValue==","){ai[aw][ai[aw].length]=av}}}if(au&&aw>1){au=ai[aw].length==ai[aw-2].length}}if(au){var aj,ag,am,ar,ay=g.createDocumentFragment();for(aw=0;aw<aq;aw=aw+2){aj=g.createDocumentFragment();ag=g.createDocumentFragment();ap=al.firstChild;am=ap.childNodes.length;ar=0;ap.removeChild(ap.firstChild);for(av=1;av<am-1;av++){if(typeof ai[aw][ar]!="undefined"&&av==ai[aw][ar]){ap.removeChild(ap.firstChild);aj.appendChild(L("mtd",ag));ar++}else{ag.appendChild(ap.firstChild)}}aj.appendChild(L("mtd",ag));if(al.childNodes.length>2){al.removeChild(al.firstChild);al.removeChild(al.firstChild)}ay.appendChild(L("mtr",aj))}ap=L("mtable",ay);if(typeof at.invisible=="boolean"&&at.invisible){ap.setAttribute("columnalign","left")}al.replaceChild(ap,al.firstChild)}}}}ao=t(ao,at.input.length);if(typeof at.invisible!="boolean"||!at.invisible){ap=L("mo",g.createTextNode(at.output));al.appendChild(ap)}}return[al,ao]}function e(ai){var ah=Q("mstyle");if(H!=""){ah.setAttribute("mathcolor",H)}if(s){ah.setAttribute("displaystyle","true")}if(ab!=""){ah.setAttribute("fontfamily",ab)}J=0;ah.appendChild(v(ai.replace(/^\s+/g,""),false)[0]);ah=L("math",ah);if(B){ah.setAttribute("title",ai.replace(/\s+/g," "))}if(ab!=""&&(p||ab!="serif")){var ag=U("font");ag.setAttribute("face",ab);ag.appendChild(ah);return ag}return ah}B=false;ab="";H="";(function(){for(var ah=0,ag=F.length;ah<ag;ah++){if(F[ah].codes){delete F[ah].codes}if(F[ah].func){F[ah].tag="mi"}}})();F.push({input:"gt",tag:"mo",output:">",tex:null,ttype:d},{input:"gt=",tag:"mo",output:"\u2265",tex:"geq",ttype:d},{input:"-<=",tag:"mo",output:"\u2AAF",tex:"preceq",ttype:d},{input:">-=",tag:"mo",output:"\u2AB0",tex:"succeq",ttype:d},{input:"'",tag:"mo",output:"\u2032",tex:"prime",ttype:d},{input:"arcsin",tag:"mi",output:"arcsin",tex:null,ttype:G,func:true},{input:"arccos",tag:"mi",output:"arccos",tex:null,ttype:G,func:true},{input:"arctan",tag:"mi",output:"arctan",tex:null,ttype:G,func:true},{input:"coth",tag:"mi",output:"coth",tex:null,ttype:G,func:true},{input:"sech",tag:"mi",output:"sech",tex:null,ttype:G,func:true},{input:"csch",tag:"mi",output:"csch",tex:null,ttype:G,func:true},{input:"abs",tag:"mi",output:"abs",tex:null,ttype:G,func:true},{input:"exp",tag:"mi",output:"exp",tex:null,ttype:G,func:true},{input:"tilde",tag:"mover",output:"~",tex:null,ttype:G,acc:true});ae.Augment({AM:{Init:function(){s=ae.config.displaystyle;decimal=ae.config.decimal;D();u()},Augment:function(ag){for(var ah in ag){if(ag.hasOwnProperty(ah)){switch(ah){case"displaystyle":s=ag[ah];break;case"decimal":decimal=ag[ah];break;case"parseMath":e=ag[ah];break;case"parseExpr":v=ag[ah];break;case"parseIexpr":y=ag[ah];break;case"parseSexpr":K=ag[ah];break;case"removeBrackets":S=ag[ah];break;case"getSymbol":m=ag[ah];break;case"position":c=ag[ah];break;case"removeCharsAndBlanks":t=ag[ah];break;case"createMmlNode":L=ag[ah];break;case"createElementMathML":Q=ag[ah];break;case"createElementXHTML":U=ag[ah];break;case"initSymbols":u=ag[ah];break;case"compareNames":comareNames=ag[ah];break}this[ah]=ag[ah]}}},parseMath:e,parseExpr:v,parseIexpr:y,parseSexr:K,removeBrackets:S,getSymbol:m,position:c,removeCharsAndBlanks:t,createMmlNode:L,createElementMathML:Q,createElementXHTML:U,initSymbols:u,compareNames:V,createDocumentFragment:Z,document:g,define:A,symbols:F,names:T,TOKEN:{CONST:d,UNARY:G,BINARY:W,INFIX:l,LEFTBRACKET:b,RIGHTBRACKET:k,SPACE:a,UNDEROVER:O,DEFINITION:Y,LEFTRIGHT:q,TEXT:aa}}});var ac=[R,N];ac=null})(MathJax.InputJax.AsciiMath);(function(b){var a;b.Augment({sourceMenuTitle:"AsciiMath input",prefilterHooks:MathJax.Callback.Hooks(true),postfilterHooks:MathJax.Callback.Hooks(true),Translate:function(c){var d,f=c.innerHTML.replace(/^\s+/,"").replace(/\s+$/,"");var g={math:f,script:c};this.prefilterHooks.Execute(g);f=g.math;try{d=this.AM.parseMath(f)}catch(e){if(!e.asciimathError){throw e}d=this.formatError(e,f)}g.math=a(d);this.postfilterHooks.Execute(g);return g.math},formatError:function(f,e,c){var d=f.message.replace(/\n.*/,"");MathJax.Hub.signal.Post(["AsciiMath Jax - parse error",d,e,c]);return a.merror(d)},Error:function(c){throw MathJax.Hub.Insert(Error(c),{asciimathError:true})},Startup:function(){a=MathJax.ElementJax.mml;this.AM.Init()}});b.loadComplete("jax.js")})(MathJax.InputJax.AsciiMath);
+
diff --git a/unpacked/extensions/asciimath2jax.js b/unpacked/extensions/asciimath2jax.js
@@ -0,0 +1,228 @@
+/*************************************************************
+ *
+ * MathJax/extensions/asciimath2jax.js
+ *
+ * Implements the AsciiMath to Jax preprocessor that locates AsciiMath
+ * code within the text of a document and replaces it with SCRIPT tags for
+ * processing by MathJax.
+ *
+ * Modified by David Lippman, based on tex2jax.js.
+ * Additional work by Davide P. Cervone.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+MathJax.Extension.asciimath2jax = {
+ version: "1.0",
+ config: {
+ delimiters: ['`'], // The delimiter(s) for asciimath code
+
+ skipTags: ["script","noscript","style","textarea","pre","code"],
+ // The names of the tags whose contents will not be
+ // scanned for math delimiters
+
+ ignoreClass: "asciimath2jax_ignore", // the class name of elements whose contents should
+ // NOT be processed by asciimath2jax. Note that this
+ // is a regular expression, so be sure to quote any
+ // regexp special characters
+
+ processClass: "asciimath2jax_process", // the class name of elements whose contents SHOULD
+ // be processed when they appear inside ones that
+ // are ignored. Note that this is a regular expression,
+ // so be sure to quote any regexp special characters
+
+ preview: "AsciiMath" // set to "none" to not insert MathJax_Preview spans
+ // or set to an array specifying an HTML snippet
+ // to use the same preview for every equation.
+
+ },
+
+ PreProcess: function (element) {
+ if (!this.configured) {
+ this.config = MathJax.Hub.CombineConfig("asciimath2jax",this.config);
+ if (this.config.Augment) {MathJax.Hub.Insert(this,this.config.Augment)}
+ this.configured = true;
+ }
+ if (typeof(element) === "string") {element = document.getElementById(element)}
+ if (!element) {element = document.body}
+ if (this.createPatterns()) {this.scanElement(element,element.nextSibling)}
+ },
+
+ createPatterns: function () {
+ var starts = [], i, m, config = this.config; this.match = {};
+ if (config.delimiters.length === 0) {return false}
+ for (i = 0, m = config.delimiters.length; i < m; i++) {
+ starts.push(this.patternQuote(config.delimiters[i]));
+ this.match[config.delimiters[i]] = {
+ mode: "",
+ end: config.delimiters[i],
+ pattern: this.endPattern(config.delimiters[i])
+ };
+ }
+ this.start = new RegExp(starts.sort(this.sortLength).join("|"),"g");
+ this.skipTags = new RegExp("^("+config.skipTags.join("|")+")$","i");
+ this.ignoreClass = new RegExp("(^| )("+config.ignoreClass+")( |$)");
+ this.processClass = new RegExp("(^| )("+config.processClass+")( |$)");
+ return true;
+ },
+
+ patternQuote: function (s) {return s.replace(/([\^$(){}+*?\-|\[\]\:\\])/g,'\\$1')},
+
+ endPattern: function (end) {
+ return new RegExp(this.patternQuote(end)+"|\\\\.","g");
+ },
+
+ sortLength: function (a,b) {
+ if (a.length !== b.length) {return b.length - a.length}
+ return (a == b ? 0 : (a < b ? -1 : 1));
+ },
+
+ scanElement: function (element,stop,ignore) {
+ var cname, tname, ignoreChild, process;
+ while (element && element != stop) {
+ if (element.nodeName.toLowerCase() === '#text') {
+ if (!ignore) {element = this.scanText(element)}
+ } else {
+ cname = (typeof(element.className) === "undefined" ? "" : element.className);
+ tname = (typeof(element.tagName) === "undefined" ? "" : element.tagName);
+ if (typeof(cname) !== "string") {cname = String(cname)} // jsxgraph uses non-string class names!
+ process = this.processClass.exec(cname);
+ if (element.firstChild && !cname.match(/(^| )MathJax/) &&
+ (process || !this.skipTags.exec(tname))) {
+ ignoreChild = (ignore || this.ignoreClass.exec(cname)) && !process;
+ this.scanElement(element.firstChild,stop,ignoreChild);
+ }
+ }
+ if (element) {element = element.nextSibling}
+ }
+ },
+
+ scanText: function (element) {
+ if (element.nodeValue.replace(/\s+/,'') == '') {return element}
+ var match, prev;
+ this.search = {start: true};
+ this.pattern = this.start;
+ while (element) {
+ this.pattern.lastIndex = 0;
+ while (element && element.nodeName.toLowerCase() === '#text' &&
+ (match = this.pattern.exec(element.nodeValue))) {
+ if (this.search.start) {element = this.startMatch(match,element)}
+ else {element = this.endMatch(match,element)}
+ }
+ if (this.search.matched) {element = this.encloseMath(element)}
+ if (element) {
+ do {prev = element; element = element.nextSibling}
+ while (element && (element.nodeName.toLowerCase() === 'br' ||
+ element.nodeName.toLowerCase() === '#comment'));
+ if (!element || element.nodeName !== '#text') {return prev}
+ }
+ }
+ return element;
+ },
+
+ startMatch: function (match,element) {
+ var delim = this.match[match[0]];
+ if (delim != null) {
+ this.search = {
+ end: delim.end, mode: delim.mode,
+ open: element, olen: match[0].length,
+ opos: this.pattern.lastIndex - match[0].length
+ };
+ this.switchPattern(delim.pattern);
+ }
+ return element;
+ },
+
+ endMatch: function (match,element) {
+ if (match[0] == this.search.end) {
+ this.search.close = element;
+ this.search.cpos = this.pattern.lastIndex;
+ this.search.clen = (this.search.isBeginEnd ? 0 : match[0].length);
+ this.search.matched = true;
+ element = this.encloseMath(element);
+ this.switchPattern(this.start);
+ }
+ return element;
+ },
+
+ switchPattern: function (pattern) {
+ pattern.lastIndex = this.pattern.lastIndex;
+ this.pattern = pattern;
+ this.search.start = (pattern === this.start);
+ },
+
+ encloseMath: function (element) {
+ var search = this.search, close = search.close, CLOSE, math;
+ if (search.cpos === close.length) {close = close.nextSibling}
+ else {close = close.splitText(search.cpos)}
+ if (!close) {CLOSE = close = MathJax.HTML.addText(search.close.parentNode,"")}
+ search.close = close;
+ math = (search.opos ? search.open.splitText(search.opos) : search.open);
+ while (math.nextSibling && math.nextSibling !== close) {
+ if (math.nextSibling.nodeValue !== null) {
+ if (math.nextSibling.nodeName === "#comment") {
+ math.nodeValue += math.nextSibling.nodeValue.replace(/^\[CDATA\[((.|\n|\r)*)\]\]$/,"$1");
+ } else {
+ math.nodeValue += math.nextSibling.nodeValue;
+ }
+ } else if (this.msieNewlineBug) {
+ math.nodeValue += (math.nextSibling.nodeName.toLowerCase() === "br" ? "\n" : " ");
+ } else {
+ math.nodeValue += " ";
+ }
+ math.parentNode.removeChild(math.nextSibling);
+ }
+ var TeX = math.nodeValue.substr(search.olen,math.nodeValue.length-search.olen-search.clen);
+ math.parentNode.removeChild(math);
+ if (this.config.preview !== "none") {this.createPreview(search.mode,TeX)}
+ math = this.createMathTag(search.mode,TeX);
+ this.search = {}; this.pattern.lastIndex = 0;
+ if (CLOSE) {CLOSE.parentNode.removeChild(CLOSE)}
+ return math;
+ },
+
+ insertNode: function (node) {
+ var search = this.search;
+ search.close.parentNode.insertBefore(node,search.close);
+ },
+
+ createPreview: function (mode,asciimath) {
+ var preview;
+ if (this.config.preview === "AsciiMath") {preview = [this.filterAM(asciimath)]}
+ else if (this.config.preview instanceof Array) {preview = this.config.preview}
+ if (preview) {
+ preview = MathJax.HTML.Element("span",{className:MathJax.Hub.config.preRemoveClass},preview);
+ this.insertNode(preview);
+ }
+ },
+
+ createMathTag: function (mode,asciimath) {
+ var script = document.createElement("script");
+ script.type = "math/asciimath" + mode;
+ MathJax.HTML.setScript(script,asciimath);
+ this.insertNode(script);
+ return script;
+ },
+
+ filterAM: function (asciimath) {return asciimath},
+
+ msieNewlineBug: (MathJax.Hub.Browser.isMSIE && (document.documentMode||0) < 9)
+
+};
+
+MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.asciimath2jax]);
+MathJax.Ajax.loadComplete("[MathJax]/extensions/asciimath2jax.js");
diff --git a/unpacked/jax/input/AsciiMath/config.js b/unpacked/jax/input/AsciiMath/config.js
@@ -0,0 +1,41 @@
+/*************************************************************
+ *
+ * MathJax/jax/input/AsciiMath/config.js
+ *
+ * Initializes the AsciiMath InputJax (the main definition is in
+ * MathJax/jax/input/AsciiMath/jax.js, which is loaded when needed).
+ *
+ * Originally adapted for MathJax by David Lippman.
+ * Additional work done by Davide P. Cervone.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+MathJax.InputJax.AsciiMath = MathJax.InputJax({
+ id: "AsciiMath",
+ version: "1.0",
+ directory: MathJax.InputJax.directory + "/AsciiMath",
+ extensionDir: MathJax.InputJax.extensionDir + "/AsciiMath",
+
+ config: {
+ displaystyle: true, // put limits above and below operators
+ decimal: "." // can change to "," but watch out for "(1,2)"
+ }
+});
+MathJax.InputJax.AsciiMath.Register("math/asciimath");
+
+MathJax.InputJax.AsciiMath.loadComplete("config.js");
diff --git a/unpacked/jax/input/AsciiMath/jax.js b/unpacked/jax/input/AsciiMath/jax.js
@@ -0,0 +1,1287 @@
+/*************************************************************
+ *
+ * MathJax/jax/input/AsciiMath/jax.js
+ *
+ * An Input Jax for AsciiMath notation
+ * (see http://www1.chapman.edu/~jipsen/mathml/asciimath.html).
+ *
+ * Originally adapted for MathJax by David Lippman.
+ * Additional work done by Davide P. Cervone.
+ *
+ * A portion of this file is taken from
+ * ASCIIMathML.js Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen
+ * and is used by permission of Peter Jipsen, who has agreed to allow us to
+ * release it under the Apache2 license (see below). That portion is indicated
+ * via comments.
+ *
+ * The remainder falls under the copyright that follows.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (ASCIIMATH) {
+
+ var MML; // Filled in later
+
+ //
+ // Make a documentFragment work-alike that uses MML objects
+ // rather than DOM objects.
+ //
+ var DOCFRAG = MathJax.Object.Subclass({
+ firstChild: null,
+ lastChild: null,
+ Init: function () {
+ this.childNodes = [];
+ },
+ appendChild: function (node) {
+ if (node.parent) {node.parent.removeChild(node)}
+ if (this.lastChild) {this.lastChild.nextSibling = node}
+ if (!this.firstChild) {this.firstChild = node}
+ this.childNodes.push(node); node.parent = this;
+ this.lastChild = node;
+ return node;
+ },
+ removeChild: function (node) {
+ for (var i = 0, m = this.childNodes.length; i < m; i++)
+ {if (this.childNodes[i] === node) break}
+ if (i === m) return;
+ this.childNodes.splice(i,1);
+ if (node === this.firstChild) {this.firstChild = node.nextSibling}
+ if (node === this.lastChild) {
+ if (!this.childNodes.length) {this.lastChild = null}
+ else {this.lastChild = this.childNodes[this.childNodes.length-1]}
+ }
+ if (i) {this.childNodes[i-1].nextSibling = node.nextSibling}
+ node.nextSibling = node.parent = null;
+ return node;
+ },
+ replaceChild: function (node,old) {
+ for (var i = 0, m = this.childNodes.length; i < m; i++)
+ {if (this.childNodes[i] === old) break}
+ if (i) {this.childNodes[i-1].nextSibling = node} else {this.firstChild = node}
+ if (i >= m-1) {this.lastChild = node}
+ this.childNodes[i] = node; node.nextSibling = old.nextSibling;
+ old.nextSibling = old.parent = null;
+ return old;
+ }
+ });
+
+ var INITASCIIMATH = function () {
+ MML = MathJax.ElementJax.mml;
+ var MBASEINIT = MML.mbase.prototype.Init;
+
+ //
+ // Make MML elements looks like DOM elements (add the
+ // methods that AsciiMath needs)
+ //
+ MML.mbase.Augment({
+ firstChild: null,
+ lastChild: null,
+ nodeValue: "",
+ nextSibling: null,
+ Init: function () {
+ var obj = MBASEINIT.apply(this,arguments) || this;
+ obj.childNodes = obj.data;
+ obj.nodeName = obj.type;
+ return obj;
+ },
+ appendChild: function (node) {
+ if (node.parent) {node.parent.removeChild(node)}
+ var nodes = arguments; if (node.isa(DOCFRAG)) {nodes = node.childNodes}
+ for (var i = 0, m = nodes.length; i < m; i++) {
+ node = nodes[i];
+ if (this.lastChild) {this.lastChild.nextSibling = node}
+ if (!this.firstChild) {this.firstChild = node}
+ this.Append(node);
+ this.lastChild = node;
+ this.nodeValue += node.nodeValue;
+ }
+ return node;
+ },
+ removeChild: function (node) {
+ for (var i = 0, m = this.childNodes.length; i < m; i++)
+ {if (this.childNodes[i] === node) break}
+ if (i === m) return;
+ this.childNodes.splice(i,1);
+ if (node === this.firstChild) {this.firstChild = node.nextSibling}
+ if (node === this.lastChild) {
+ if (!this.childNodes.length) {this.lastChild = null}
+ else {this.lastChild = this.childNodes[this.childNodes.length-1]}
+ }
+ if (i) {this.childNodes[i-1].nextSibling = node.nextSibling}
+ this.nodeValue = "";
+ for (i = 0, m = this.childNodes.length; i < m; i++)
+ {this.nodeValue += this.childNodes[i].nodeValue}
+ node.nextSibling = node.parent = null;
+ return node;
+ },
+ replaceChild: function (node,old) {
+ for (var i = 0, m = this.childNodes.length; i < m; i++)
+ {if (this.childNodes[i] === old) break}
+ // FIXME: make this work with DOCFRAG's?
+ if (i) {this.childNodes[i-1].nextSibling = node} else {this.firstChild = node}
+ if (i >= m-1) {this.lastChild = node}
+ this.SetData(i,node); node.nextSibling = old.nextSibling;
+ this.nodeValue = "";
+ for (i = 0, m = this.childNodes.length; i < m; i++)
+ {this.nodeValue += this.childNodes[i].nodeValue}
+ old.nextSibling = old.parent = null;
+ return old;
+ },
+ setAttribute: function (name,value) {this[name] = value}
+ });
+ };
+
+ //
+ // Set up to isolate ASCIIMathML.js
+ //
+
+ var window = {}; // hide the true window
+
+ //
+ // Hide the true document, and add functions that
+ // use and produce MML objects instead of DOM objects
+ //
+ var document = {
+ getElementById: true,
+ createElementNS: function (ns,type) {return MML[type]()},
+ createTextNode: function (text) {return MML.chars(text).With({nodeValue:text})},
+ createDocumentFragment: function () {return DOCFRAG()}
+ };
+
+ var navigator = {appName: "MathJax"}; // hide the true navigator object
+
+
+/******************************************************************
+ *
+ * The following section is ASCIIMathML.js Version 1.4.7
+ * (c) Peter Jipsen, used with permission.
+ *
+ * Some sections are commented out to save space in the
+ * minified version (but that is not strictly necessary).
+ * A few items are commented out and marked with DPVC comments
+ * in order to keep the minifier from complaining about the
+ * coding practices in ASCIIMathML.js
+ *
+ ******************************************************************/
+
+/*
+ASCIIMathML.js
+==============
+This file contains JavaScript functions to convert ASCII math notation
+to Presentation MathML. The conversion is done while the (X)HTML page
+loads, and should work with Firefox/Mozilla/Netscape 7+ and Internet
+Explorer 6+MathPlayer (http://www.dessci.com/en/products/mathplayer/).
+Just add the next line to your (X)HTML page with this file in the same folder:
+<script type="text/javascript" src="ASCIIMathML.js"></script>
+This is a convenient and inexpensive solution for authoring MathML.
+
+Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen
+Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js
+For changes see http://www.chapman.edu/~jipsen/mathml/asciimathchanges.txt
+If you use it on a webpage, please send the URL to jipsen@chapman.edu
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License (at http://www.gnu.org/copyleft/gpl.html)
+for more details.
+*/
+
+//var checkForMathML = true; // check if browser can display MathML
+//var notifyIfNoMathML = true; // display note if no MathML capability
+//var alertIfNoMathML = true; // show alert box if no MathML capability
+var mathcolor = "red"; // change it to "" (to inherit) or any other color
+var mathfontfamily = "serif"; // change to "" to inherit (works in IE)
+ // or another family (e.g. "arial")
+var displaystyle = true; // puts limits above and below large operators
+var showasciiformulaonhover = true; // helps students learn ASCIIMath
+var decimalsign = "."; // change to "," if you like, beware of `(1,2)`!
+//var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters
+//var AMdelimiter2 = "$", AMescape2 = "\\\\\\$", AMdelimiter2regexp = "\\$";
+//var doubleblankmathdelimiter = false; // if true, x+1 is equal to `x+1`
+ // for IE this works only in <!-- -->
+//var separatetokens;// has been removed (email me if this is a problem)
+var isIE = document.createElementNS==null;
+
+/*
+ * if (document.getElementById==null)
+ * alert("This webpage requires a recent browser such as\
+ * \nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer")
+ */
+
+// all further global variables start with "AM"
+
+function AMcreateElementXHTML(t) {
+ if (isIE) return document.createElement(t);
+ else return document.createElementNS("http://www.w3.org/1999/xhtml",t);
+}
+
+/*
+ * function AMnoMathMLNote() {
+ * var nd = AMcreateElementXHTML("h3");
+ * nd.setAttribute("align","center")
+ * nd.appendChild(AMcreateElementXHTML("p"));
+ * nd.appendChild(document.createTextNode("To view the "));
+ * var an = AMcreateElementXHTML("a");
+ * an.appendChild(document.createTextNode("ASCIIMathML"));
+ * an.setAttribute("href","http://www.chapman.edu/~jipsen/asciimath.html");
+ * nd.appendChild(an);
+ * nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+"));
+ * an = AMcreateElementXHTML("a");
+ * an.appendChild(document.createTextNode("MathPlayer"));
+ * an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm");
+ * nd.appendChild(an);
+ * nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox"));
+ * nd.appendChild(AMcreateElementXHTML("p"));
+ * return nd;
+ * }
+ *
+ * function AMisMathMLavailable() {
+ * if (navigator.appName.slice(0,8)=="Netscape")
+ * if (navigator.appVersion.slice(0,1)>="5") return null;
+ * else return AMnoMathMLNote();
+ * else if (navigator.appName.slice(0,9)=="Microsoft")
+ * try {
+ * var ActiveX = new ActiveXObject("MathPlayer.Factory.1");
+ * return null;
+ * } catch (e) {
+ * return AMnoMathMLNote();
+ * }
+ * else return AMnoMathMLNote();
+ * }
+ */
+
+// character lists for Mozilla/Netscape fonts
+var AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];
+var AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];
+var AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];
+
+var CONST = 0, UNARY = 1, BINARY = 2, INFIX = 3, LEFTBRACKET = 4,
+ RIGHTBRACKET = 5, SPACE = 6, UNDEROVER = 7, DEFINITION = 8,
+ LEFTRIGHT = 9, TEXT = 10; // token types
+
+var AMsqrt = {input:"sqrt", tag:"msqrt", output:"sqrt", tex:null, ttype:UNARY},
+ AMroot = {input:"root", tag:"mroot", output:"root", tex:null, ttype:BINARY},
+ AMfrac = {input:"frac", tag:"mfrac", output:"/", tex:null, ttype:BINARY},
+ AMdiv = {input:"/", tag:"mfrac", output:"/", tex:null, ttype:INFIX},
+ AMover = {input:"stackrel", tag:"mover", output:"stackrel", tex:null, ttype:BINARY},
+ AMsub = {input:"_", tag:"msub", output:"_", tex:null, ttype:INFIX},
+ AMsup = {input:"^", tag:"msup", output:"^", tex:null, ttype:INFIX},
+ AMtext = {input:"text", tag:"mtext", output:"text", tex:null, ttype:TEXT},
+ AMmbox = {input:"mbox", tag:"mtext", output:"mbox", tex:null, ttype:TEXT},
+ AMquote = {input:"\"", tag:"mtext", output:"mbox", tex:null, ttype:TEXT};
+
+var AMsymbols = [
+//some greek symbols
+{input:"alpha", tag:"mi", output:"\u03B1", tex:null, ttype:CONST},
+{input:"beta", tag:"mi", output:"\u03B2", tex:null, ttype:CONST},
+{input:"chi", tag:"mi", output:"\u03C7", tex:null, ttype:CONST},
+{input:"delta", tag:"mi", output:"\u03B4", tex:null, ttype:CONST},
+{input:"Delta", tag:"mo", output:"\u0394", tex:null, ttype:CONST},
+{input:"epsi", tag:"mi", output:"\u03B5", tex:"epsilon", ttype:CONST},
+{input:"varepsilon", tag:"mi", output:"\u025B", tex:null, ttype:CONST},
+{input:"eta", tag:"mi", output:"\u03B7", tex:null, ttype:CONST},
+{input:"gamma", tag:"mi", output:"\u03B3", tex:null, ttype:CONST},
+{input:"Gamma", tag:"mo", output:"\u0393", tex:null, ttype:CONST},
+{input:"iota", tag:"mi", output:"\u03B9", tex:null, ttype:CONST},
+{input:"kappa", tag:"mi", output:"\u03BA", tex:null, ttype:CONST},
+{input:"lambda", tag:"mi", output:"\u03BB", tex:null, ttype:CONST},
+{input:"Lambda", tag:"mo", output:"\u039B", tex:null, ttype:CONST},
+{input:"mu", tag:"mi", output:"\u03BC", tex:null, ttype:CONST},
+{input:"nu", tag:"mi", output:"\u03BD", tex:null, ttype:CONST},
+{input:"omega", tag:"mi", output:"\u03C9", tex:null, ttype:CONST},
+{input:"Omega", tag:"mo", output:"\u03A9", tex:null, ttype:CONST},
+{input:"phi", tag:"mi", output:"\u03C6", tex:null, ttype:CONST},
+{input:"varphi", tag:"mi", output:"\u03D5", tex:null, ttype:CONST},
+{input:"Phi", tag:"mo", output:"\u03A6", tex:null, ttype:CONST},
+{input:"pi", tag:"mi", output:"\u03C0", tex:null, ttype:CONST},
+{input:"Pi", tag:"mo", output:"\u03A0", tex:null, ttype:CONST},
+{input:"psi", tag:"mi", output:"\u03C8", tex:null, ttype:CONST},
+{input:"Psi", tag:"mi", output:"\u03A8", tex:null, ttype:CONST},
+{input:"rho", tag:"mi", output:"\u03C1", tex:null, ttype:CONST},
+{input:"sigma", tag:"mi", output:"\u03C3", tex:null, ttype:CONST},
+{input:"Sigma", tag:"mo", output:"\u03A3", tex:null, ttype:CONST},
+{input:"tau", tag:"mi", output:"\u03C4", tex:null, ttype:CONST},
+{input:"theta", tag:"mi", output:"\u03B8", tex:null, ttype:CONST},
+{input:"vartheta", tag:"mi", output:"\u03D1", tex:null, ttype:CONST},
+{input:"Theta", tag:"mo", output:"\u0398", tex:null, ttype:CONST},
+{input:"upsilon", tag:"mi", output:"\u03C5", tex:null, ttype:CONST},
+{input:"xi", tag:"mi", output:"\u03BE", tex:null, ttype:CONST},
+{input:"Xi", tag:"mo", output:"\u039E", tex:null, ttype:CONST},
+{input:"zeta", tag:"mi", output:"\u03B6", tex:null, ttype:CONST},
+
+//binary operation symbols
+{input:"*", tag:"mo", output:"\u22C5", tex:"cdot", ttype:CONST},
+{input:"**", tag:"mo", output:"\u22C6", tex:"star", ttype:CONST},
+{input:"//", tag:"mo", output:"/", tex:null, ttype:CONST},
+{input:"\\\\", tag:"mo", output:"\\", tex:"backslash", ttype:CONST},
+{input:"setminus", tag:"mo", output:"\\", tex:null, ttype:CONST},
+{input:"xx", tag:"mo", output:"\u00D7", tex:"times", ttype:CONST},
+{input:"-:", tag:"mo", output:"\u00F7", tex:"divide", ttype:CONST},
+{input:"@", tag:"mo", output:"\u2218", tex:"circ", ttype:CONST},
+{input:"o+", tag:"mo", output:"\u2295", tex:"oplus", ttype:CONST},
+{input:"ox", tag:"mo", output:"\u2297", tex:"otimes", ttype:CONST},
+{input:"o.", tag:"mo", output:"\u2299", tex:"odot", ttype:CONST},
+{input:"sum", tag:"mo", output:"\u2211", tex:null, ttype:UNDEROVER},
+{input:"prod", tag:"mo", output:"\u220F", tex:null, ttype:UNDEROVER},
+{input:"^^", tag:"mo", output:"\u2227", tex:"wedge", ttype:CONST},
+{input:"^^^", tag:"mo", output:"\u22C0", tex:"bigwedge", ttype:UNDEROVER},
+{input:"vv", tag:"mo", output:"\u2228", tex:"vee", ttype:CONST},
+{input:"vvv", tag:"mo", output:"\u22C1", tex:"bigvee", ttype:UNDEROVER},
+{input:"nn", tag:"mo", output:"\u2229", tex:"cap", ttype:CONST},
+{input:"nnn", tag:"mo", output:"\u22C2", tex:"bigcap", ttype:UNDEROVER},
+{input:"uu", tag:"mo", output:"\u222A", tex:"cup", ttype:CONST},
+{input:"uuu", tag:"mo", output:"\u22C3", tex:"bigcup", ttype:UNDEROVER},
+
+//binary relation symbols
+{input:"!=", tag:"mo", output:"\u2260", tex:"ne", ttype:CONST},
+{input:":=", tag:"mo", output:":=", tex:null, ttype:CONST},
+{input:"lt", tag:"mo", output:"<", tex:null, ttype:CONST},
+{input:"<=", tag:"mo", output:"\u2264", tex:"le", ttype:CONST},
+{input:"lt=", tag:"mo", output:"\u2264", tex:"leq", ttype:CONST},
+{input:">=", tag:"mo", output:"\u2265", tex:"ge", ttype:CONST},
+{input:"geq", tag:"mo", output:"\u2265", tex:null, ttype:CONST},
+{input:"-<", tag:"mo", output:"\u227A", tex:"prec", ttype:CONST},
+{input:"-lt", tag:"mo", output:"\u227A", tex:null, ttype:CONST},
+{input:">-", tag:"mo", output:"\u227B", tex:"succ", ttype:CONST},
+{input:"in", tag:"mo", output:"\u2208", tex:null, ttype:CONST},
+{input:"!in", tag:"mo", output:"\u2209", tex:"notin", ttype:CONST},
+{input:"sub", tag:"mo", output:"\u2282", tex:"subset", ttype:CONST},
+{input:"sup", tag:"mo", output:"\u2283", tex:"supset", ttype:CONST},
+{input:"sube", tag:"mo", output:"\u2286", tex:"subseteq", ttype:CONST},
+{input:"supe", tag:"mo", output:"\u2287", tex:"supseteq", ttype:CONST},
+{input:"-=", tag:"mo", output:"\u2261", tex:"equiv", ttype:CONST},
+{input:"~=", tag:"mo", output:"\u2245", tex:"cong", ttype:CONST},
+{input:"~~", tag:"mo", output:"\u2248", tex:"approx", ttype:CONST},
+{input:"prop", tag:"mo", output:"\u221D", tex:"propto", ttype:CONST},
+
+//logical symbols
+{input:"and", tag:"mtext", output:"and", tex:null, ttype:SPACE},
+{input:"or", tag:"mtext", output:"or", tex:null, ttype:SPACE},
+{input:"not", tag:"mo", output:"\u00AC", tex:"neg", ttype:CONST},
+{input:"=>", tag:"mo", output:"\u21D2", tex:"implies", ttype:CONST},
+{input:"if", tag:"mo", output:"if", tex:null, ttype:SPACE},
+{input:"<=>", tag:"mo", output:"\u21D4", tex:"iff", ttype:CONST},
+{input:"AA", tag:"mo", output:"\u2200", tex:"forall", ttype:CONST},
+{input:"EE", tag:"mo", output:"\u2203", tex:"exists", ttype:CONST},
+{input:"_|_", tag:"mo", output:"\u22A5", tex:"bot", ttype:CONST},
+{input:"TT", tag:"mo", output:"\u22A4", tex:"top", ttype:CONST},
+{input:"|--", tag:"mo", output:"\u22A2", tex:"vdash", ttype:CONST},
+{input:"|==", tag:"mo", output:"\u22A8", tex:"models", ttype:CONST},
+
+//grouping brackets
+{input:"(", tag:"mo", output:"(", tex:null, ttype:LEFTBRACKET},
+{input:")", tag:"mo", output:")", tex:null, ttype:RIGHTBRACKET},
+{input:"[", tag:"mo", output:"[", tex:null, ttype:LEFTBRACKET},
+{input:"]", tag:"mo", output:"]", tex:null, ttype:RIGHTBRACKET},
+{input:"{", tag:"mo", output:"{", tex:null, ttype:LEFTBRACKET},
+{input:"}", tag:"mo", output:"}", tex:null, ttype:RIGHTBRACKET},
+{input:"|", tag:"mo", output:"|", tex:null, ttype:LEFTRIGHT},
+//{input:"||", tag:"mo", output:"||", tex:null, ttype:LEFTRIGHT},
+{input:"(:", tag:"mo", output:"\u2329", tex:"langle", ttype:LEFTBRACKET},
+{input:":)", tag:"mo", output:"\u232A", tex:"rangle", ttype:RIGHTBRACKET},
+{input:"<<", tag:"mo", output:"\u2329", tex:null, ttype:LEFTBRACKET},
+{input:">>", tag:"mo", output:"\u232A", tex:null, ttype:RIGHTBRACKET},
+{input:"{:", tag:"mo", output:"{:", tex:null, ttype:LEFTBRACKET, invisible:true},
+{input:":}", tag:"mo", output:":}", tex:null, ttype:RIGHTBRACKET, invisible:true},
+
+//miscellaneous symbols
+{input:"int", tag:"mo", output:"\u222B", tex:null, ttype:CONST},
+{input:"dx", tag:"mi", output:"{:d x:}", tex:null, ttype:DEFINITION},
+{input:"dy", tag:"mi", output:"{:d y:}", tex:null, ttype:DEFINITION},
+{input:"dz", tag:"mi", output:"{:d z:}", tex:null, ttype:DEFINITION},
+{input:"dt", tag:"mi", output:"{:d t:}", tex:null, ttype:DEFINITION},
+{input:"oint", tag:"mo", output:"\u222E", tex:null, ttype:CONST},
+{input:"del", tag:"mo", output:"\u2202", tex:"partial", ttype:CONST},
+{input:"grad", tag:"mo", output:"\u2207", tex:"nabla", ttype:CONST},
+{input:"+-", tag:"mo", output:"\u00B1", tex:"pm", ttype:CONST},
+{input:"O/", tag:"mo", output:"\u2205", tex:"emptyset", ttype:CONST},
+{input:"oo", tag:"mo", output:"\u221E", tex:"infty", ttype:CONST},
+{input:"aleph", tag:"mo", output:"\u2135", tex:null, ttype:CONST},
+{input:"...", tag:"mo", output:"...", tex:"ldots", ttype:CONST},
+{input:":.", tag:"mo", output:"\u2234", tex:"therefore", ttype:CONST},
+{input:"/_", tag:"mo", output:"\u2220", tex:"angle", ttype:CONST},
+{input:"\\ ", tag:"mo", output:"\u00A0", tex:null, ttype:CONST},
+{input:"quad", tag:"mo", output:"\u00A0\u00A0", tex:null, ttype:CONST},
+{input:"qquad", tag:"mo", output:"\u00A0\u00A0\u00A0\u00A0", tex:null, ttype:CONST},
+{input:"cdots", tag:"mo", output:"\u22EF", tex:null, ttype:CONST},
+{input:"vdots", tag:"mo", output:"\u22EE", tex:null, ttype:CONST},
+{input:"ddots", tag:"mo", output:"\u22F1", tex:null, ttype:CONST},
+{input:"diamond", tag:"mo", output:"\u22C4", tex:null, ttype:CONST},
+{input:"square", tag:"mo", output:"\u25A1", tex:null, ttype:CONST},
+{input:"|__", tag:"mo", output:"\u230A", tex:"lfloor", ttype:CONST},
+{input:"__|", tag:"mo", output:"\u230B", tex:"rfloor", ttype:CONST},
+{input:"|~", tag:"mo", output:"\u2308", tex:"lceiling", ttype:CONST},
+{input:"~|", tag:"mo", output:"\u2309", tex:"rceiling", ttype:CONST},
+{input:"CC", tag:"mo", output:"\u2102", tex:null, ttype:CONST},
+{input:"NN", tag:"mo", output:"\u2115", tex:null, ttype:CONST},
+{input:"QQ", tag:"mo", output:"\u211A", tex:null, ttype:CONST},
+{input:"RR", tag:"mo", output:"\u211D", tex:null, ttype:CONST},
+{input:"ZZ", tag:"mo", output:"\u2124", tex:null, ttype:CONST},
+{input:"f", tag:"mi", output:"f", tex:null, ttype:UNARY, func:true},
+{input:"g", tag:"mi", output:"g", tex:null, ttype:UNARY, func:true},
+
+//standard functions
+{input:"lim", tag:"mo", output:"lim", tex:null, ttype:UNDEROVER},
+{input:"Lim", tag:"mo", output:"Lim", tex:null, ttype:UNDEROVER},
+{input:"sin", tag:"mo", output:"sin", tex:null, ttype:UNARY, func:true},
+{input:"cos", tag:"mo", output:"cos", tex:null, ttype:UNARY, func:true},
+{input:"tan", tag:"mo", output:"tan", tex:null, ttype:UNARY, func:true},
+{input:"sinh", tag:"mo", output:"sinh", tex:null, ttype:UNARY, func:true},
+{input:"cosh", tag:"mo", output:"cosh", tex:null, ttype:UNARY, func:true},
+{input:"tanh", tag:"mo", output:"tanh", tex:null, ttype:UNARY, func:true},
+{input:"cot", tag:"mo", output:"cot", tex:null, ttype:UNARY, func:true},
+{input:"sec", tag:"mo", output:"sec", tex:null, ttype:UNARY, func:true},
+{input:"csc", tag:"mo", output:"csc", tex:null, ttype:UNARY, func:true},
+{input:"log", tag:"mo", output:"log", tex:null, ttype:UNARY, func:true},
+{input:"ln", tag:"mo", output:"ln", tex:null, ttype:UNARY, func:true},
+{input:"det", tag:"mo", output:"det", tex:null, ttype:UNARY, func:true},
+{input:"dim", tag:"mo", output:"dim", tex:null, ttype:CONST},
+{input:"mod", tag:"mo", output:"mod", tex:null, ttype:CONST},
+{input:"gcd", tag:"mo", output:"gcd", tex:null, ttype:UNARY, func:true},
+{input:"lcm", tag:"mo", output:"lcm", tex:null, ttype:UNARY, func:true},
+{input:"lub", tag:"mo", output:"lub", tex:null, ttype:CONST},
+{input:"glb", tag:"mo", output:"glb", tex:null, ttype:CONST},
+{input:"min", tag:"mo", output:"min", tex:null, ttype:UNDEROVER},
+{input:"max", tag:"mo", output:"max", tex:null, ttype:UNDEROVER},
+
+//arrows
+{input:"uarr", tag:"mo", output:"\u2191", tex:"uparrow", ttype:CONST},
+{input:"darr", tag:"mo", output:"\u2193", tex:"downarrow", ttype:CONST},
+{input:"rarr", tag:"mo", output:"\u2192", tex:"rightarrow", ttype:CONST},
+{input:"->", tag:"mo", output:"\u2192", tex:"to", ttype:CONST},
+{input:"|->", tag:"mo", output:"\u21A6", tex:"mapsto", ttype:CONST},
+{input:"larr", tag:"mo", output:"\u2190", tex:"leftarrow", ttype:CONST},
+{input:"harr", tag:"mo", output:"\u2194", tex:"leftrightarrow", ttype:CONST},
+{input:"rArr", tag:"mo", output:"\u21D2", tex:"Rightarrow", ttype:CONST},
+{input:"lArr", tag:"mo", output:"\u21D0", tex:"Leftarrow", ttype:CONST},
+{input:"hArr", tag:"mo", output:"\u21D4", tex:"Leftrightarrow", ttype:CONST},
+
+//commands with argument
+AMsqrt, AMroot, AMfrac, AMdiv, AMover, AMsub, AMsup,
+{input:"hat", tag:"mover", output:"\u005E", tex:null, ttype:UNARY, acc:true},
+{input:"bar", tag:"mover", output:"\u00AF", tex:"overline", ttype:UNARY, acc:true},
+{input:"vec", tag:"mover", output:"\u2192", tex:null, ttype:UNARY, acc:true},
+{input:"dot", tag:"mover", output:".", tex:null, ttype:UNARY, acc:true},
+{input:"ddot", tag:"mover", output:"..", tex:null, ttype:UNARY, acc:true},
+{input:"ul", tag:"munder", output:"\u0332", tex:"underline", ttype:UNARY, acc:true},
+AMtext, AMmbox, AMquote,
+{input:"bb", tag:"mstyle", atname:"fontweight", atval:"bold", output:"bb", tex:null, ttype:UNARY},
+{input:"mathbf", tag:"mstyle", atname:"fontweight", atval:"bold", output:"mathbf", tex:null, ttype:UNARY},
+{input:"sf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"sf", tex:null, ttype:UNARY},
+{input:"mathsf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"mathsf", tex:null, ttype:UNARY},
+{input:"bbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"bbb", tex:null, ttype:UNARY, codes:AMbbb},
+{input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
+{input:"cc", tag:"mstyle", atname:"mathvariant", atval:"script", output:"cc", tex:null, ttype:UNARY, codes:AMcal},
+{input:"mathcal", tag:"mstyle", atname:"mathvariant", atval:"script", output:"mathcal", tex:null, ttype:UNARY, codes:AMcal},
+{input:"tt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"tt", tex:null, ttype:UNARY},
+{input:"mathtt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"mathtt", tex:null, ttype:UNARY},
+{input:"fr", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"fr", tex:null, ttype:UNARY, codes:AMfrk},
+{input:"mathfrak", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"mathfrak", tex:null, ttype:UNARY, codes:AMfrk}
+];
+
+function compareNames(s1,s2) {
+ if (s1.input > s2.input) return 1
+ else return -1;
+}
+
+var AMnames = []; //list of input symbols
+
+function AMinitSymbols() {
+ var texsymbols = [], i;
+ for (i=0; i<AMsymbols.length; i++)
+ if (AMsymbols[i].tex)
+ texsymbols[texsymbols.length] = {input:AMsymbols[i].tex,
+ tag:AMsymbols[i].tag, output:AMsymbols[i].output, ttype:AMsymbols[i].ttype};
+ AMsymbols = AMsymbols.concat(texsymbols);
+ AMsymbols.sort(compareNames);
+ for (i=0; i<AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;
+}
+
+var AMmathml = "http://www.w3.org/1998/Math/MathML";
+
+function AMcreateElementMathML(t) {
+ if (isIE) return document.createElement("m:"+t);
+ else return document.createElementNS(AMmathml,t);
+}
+
+function AMcreateMmlNode(t,frag) {
+// var node = AMcreateElementMathML(name);
+ if (isIE) var node = document.createElement("m:"+t);
+ else /*var*//*DPVC*/ node = document.createElementNS(AMmathml,t);
+ node.appendChild(frag);
+ return node;
+}
+
+function newcommand(oldstr,newstr) {
+ AMsymbols = AMsymbols.concat([{input:oldstr, tag:"mo", output:newstr,
+ tex:null, ttype:DEFINITION}]);
+}
+
+function AMremoveCharsAndBlanks(str,n) {
+//remove n characters and any following blanks
+ var st;
+ if (str.charAt(n)=="\\" && str.charAt(n+1)!="\\" && str.charAt(n+1)!=" ")
+ st = str.slice(n+1);
+ else st = str.slice(n);
+ for (var i=0; i<st.length && st.charCodeAt(i)<=32; i=i+1);
+ return st.slice(i);
+}
+
+function AMposition(arr, str, n) {
+// return position >=n where str appears or would be inserted
+// assumes arr is sorted
+ if (n==0) {
+ var h,m;
+ n = -1;
+ h = arr.length;
+ while (n+1<h) {
+ m = (n+h) >> 1;
+ if (arr[m]<str) n = m; else h = m;
+ }
+ return h;
+ } else
+ for (var i=n; i<arr.length && arr[i]<str; i++);
+ return i; // i=arr.length || arr[i]>=str
+}
+
+function AMgetSymbol(str) {
+//return maximal initial substring of str that appears in names
+//return null if there is none
+ var k = 0; //new pos
+ var j = 0; //old pos
+ var mk; //match pos
+ var st;
+ var tagst;
+ var match = "";
+ var more = true;
+ for (var i=1; i<=str.length && more; i++) {
+ st = str.slice(0,i); //initial substring of length i
+ j = k;
+ k = AMposition(AMnames, st, j);
+ if (k<AMnames.length && str.slice(0,AMnames[k].length)==AMnames[k]){
+ match = AMnames[k];
+ mk = k;
+ i = match.length;
+ }
+ more = k<AMnames.length && str.slice(0,AMnames[k].length)>=AMnames[k];
+ }
+ AMpreviousSymbol=AMcurrentSymbol;
+ if (match!=""){
+ AMcurrentSymbol=AMsymbols[mk].ttype;
+ return AMsymbols[mk];
+ }
+// if str[0] is a digit or - return maxsubstring of digits.digits
+ AMcurrentSymbol=CONST;
+ k = 1;
+ st = str.slice(0,1);
+ var integ = true;
+ while ("0"<=st && st<="9" && k<=str.length) {
+ st = str.slice(k,k+1);
+ k++;
+ }
+ if (st == decimalsign) {
+ st = str.slice(k,k+1);
+ if ("0"<=st && st<="9") {
+ integ = false;
+ k++;
+ while ("0"<=st && st<="9" && k<=str.length) {
+ st = str.slice(k,k+1);
+ k++;
+ }
+ }
+ }
+ if ((integ && k>1) || k>2) {
+ st = str.slice(0,k-1);
+ tagst = "mn";
+ } else {
+ k = 2;
+ st = str.slice(0,1); //take 1 character
+ tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi");
+ }
+ if (st=="-" && AMpreviousSymbol==INFIX)
+ return {input:st, tag:tagst, output:st, ttype:UNARY, func:true};
+ return {input:st, tag:tagst, output:st, ttype:CONST};
+}
+
+function AMremoveBrackets(node) {
+ var st;
+ if (node.nodeName=="mrow") {
+ st = node.firstChild.firstChild.nodeValue;
+ if (st=="(" || st=="[" || st=="{") node.removeChild(node.firstChild);
+ }
+ if (node.nodeName=="mrow") {
+ st = node.lastChild.firstChild.nodeValue;
+ if (st==")" || st=="]" || st=="}") node.removeChild(node.lastChild);
+ }
+}
+
+/*Parsing ASCII math expressions with the following grammar
+v ::= [A-Za-z] | greek letters | numbers | other constant symbols
+u ::= sqrt | text | bb | other unary symbols for font commands
+b ::= frac | root | stackrel binary symbols
+l ::= ( | [ | { | (: | {: left brackets
+r ::= ) | ] | } | :) | :} right brackets
+S ::= v | lEr | uS | bSS Simple expression
+I ::= S_S | S^S | S_S^S | S Intermediate expression
+E ::= IE | I/I Expression
+Each terminal symbol is translated into a corresponding mathml node.*/
+
+var AMnestingDepth,AMpreviousSymbol,AMcurrentSymbol;
+
+function AMparseSexpr(str) { //parses str and returns [node,tailstr]
+ var symbol, node, result, i, st,// rightvert = false,
+ newFrag = document.createDocumentFragment();
+ str = AMremoveCharsAndBlanks(str,0);
+ symbol = AMgetSymbol(str); //either a token or a bracket or empty
+ if (symbol == null || symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0) {
+ return [null,str];
+ }
+ if (symbol.ttype == DEFINITION) {
+ str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);
+ symbol = AMgetSymbol(str);
+ }
+ switch (symbol.ttype) {
+ case UNDEROVER:
+ case CONST:
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ return [AMcreateMmlNode(symbol.tag, //its a constant
+ document.createTextNode(symbol.output)),str];
+ case LEFTBRACKET: //read (expr+)
+ AMnestingDepth++;
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ result = AMparseExpr(str,true);
+ AMnestingDepth--;
+ if (typeof symbol.invisible == "boolean" && symbol.invisible)
+ node = AMcreateMmlNode("mrow",result[0]);
+ else {
+ node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
+ node = AMcreateMmlNode("mrow",node);
+ node.appendChild(result[0]);
+ }
+ return [node,result[1]];
+ case TEXT:
+ if (symbol!=AMquote) str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ if (str.charAt(0)=="{") i=str.indexOf("}");
+ else if (str.charAt(0)=="(") i=str.indexOf(")");
+ else if (str.charAt(0)=="[") i=str.indexOf("]");
+ else if (symbol==AMquote) i=str.slice(1).indexOf("\"")+1;
+ else i = 0;
+ if (i==-1) i = str.length;
+ st = str.slice(1,i);
+ if (st.charAt(0) == " ") {
+ node = AMcreateElementMathML("mspace");
+ node.setAttribute("width","1ex");
+ newFrag.appendChild(node);
+ }
+ newFrag.appendChild(
+ AMcreateMmlNode(symbol.tag,document.createTextNode(st)));
+ if (st.charAt(st.length-1) == " ") {
+ node = AMcreateElementMathML("mspace");
+ node.setAttribute("width","1ex");
+ newFrag.appendChild(node);
+ }
+ str = AMremoveCharsAndBlanks(str,i+1);
+ return [AMcreateMmlNode("mrow",newFrag),str];
+ case UNARY:
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ result = AMparseSexpr(str);
+ if (result[0]==null) return [AMcreateMmlNode(symbol.tag,
+ document.createTextNode(symbol.output)),str];
+ if (typeof symbol.func == "boolean" && symbol.func) { // functions hack
+ st = str.charAt(0);
+ if (st=="^" || st=="_" || st=="/" || st=="|" || st==",") {
+ return [AMcreateMmlNode(symbol.tag,
+ document.createTextNode(symbol.output)),str];
+ } else {
+ node = AMcreateMmlNode("mrow",
+ AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));
+ node.appendChild(result[0]);
+ return [node,result[1]];
+ }
+ }
+ AMremoveBrackets(result[0]);
+ if (symbol.input == "sqrt") { // sqrt
+ return [AMcreateMmlNode(symbol.tag,result[0]),result[1]];
+ } else if (typeof symbol.acc == "boolean" && symbol.acc) { // accent
+ node = AMcreateMmlNode(symbol.tag,result[0]);
+ node.appendChild(AMcreateMmlNode("mo",document.createTextNode(symbol.output)));
+ return [node,result[1]];
+ } else { // font change command
+ if (!isIE && typeof symbol.codes != "undefined") {
+ for (i=0; i<result[0].childNodes.length; i++)
+ if (result[0].childNodes[i].nodeName=="mi" || result[0].nodeName=="mi") {
+ st = (result[0].nodeName=="mi"?result[0].firstChild.nodeValue:
+ result[0].childNodes[i].firstChild.nodeValue);
+ var newst = [];
+ for (var j=0; j<st.length; j++)
+ if (st.charCodeAt(j)>64 && st.charCodeAt(j)<91) newst = newst +
+ String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);
+ else newst = newst + st.charAt(j);
+ if (result[0].nodeName=="mi")
+ result[0]=AMcreateElementMathML("mo").
+ appendChild(document.createTextNode(newst));
+ else result[0].replaceChild(AMcreateElementMathML("mo").
+ appendChild(document.createTextNode(newst)),result[0].childNodes[i]);
+ }
+ }
+ node = AMcreateMmlNode(symbol.tag,result[0]);
+ node.setAttribute(symbol.atname,symbol.atval);
+ return [node,result[1]];
+ }
+ case BINARY:
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ result = AMparseSexpr(str);
+ if (result[0]==null) return [AMcreateMmlNode("mo",
+ document.createTextNode(symbol.input)),str];
+ AMremoveBrackets(result[0]);
+ var result2 = AMparseSexpr(result[1]);
+ if (result2[0]==null) return [AMcreateMmlNode("mo",
+ document.createTextNode(symbol.input)),str];
+ AMremoveBrackets(result2[0]);
+ if (symbol.input=="root" || symbol.input=="stackrel")
+ newFrag.appendChild(result2[0]);
+ newFrag.appendChild(result[0]);
+ if (symbol.input=="frac") newFrag.appendChild(result2[0]);
+ return [AMcreateMmlNode(symbol.tag,newFrag),result2[1]];
+ case INFIX:
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)),str];
+ case SPACE:
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ node = AMcreateElementMathML("mspace");
+ node.setAttribute("width","1ex");
+ newFrag.appendChild(node);
+ newFrag.appendChild(
+ AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));
+ node = AMcreateElementMathML("mspace");
+ node.setAttribute("width","1ex");
+ newFrag.appendChild(node);
+ return [AMcreateMmlNode("mrow",newFrag),str];
+ case LEFTRIGHT:
+// if (rightvert) return [null,str]; else rightvert = true;
+ AMnestingDepth++;
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ result = AMparseExpr(str,false);
+ AMnestingDepth--;
+ /*var*//*DPVC*/ st = "";
+ if (result[0].lastChild!=null)
+ st = result[0].lastChild.firstChild.nodeValue;
+//alert(result[0].lastChild+"***"+st);
+ if (st == "|") { // its an absolute value subterm
+ node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
+ node = AMcreateMmlNode("mrow",node);
+ node.appendChild(result[0]);
+ return [node,result[1]];
+ } else { // the "|" is a \mid
+ node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
+ node = AMcreateMmlNode("mrow",node);
+ return [node,str];
+ }
+ default:
+//alert("default");
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ return [AMcreateMmlNode(symbol.tag, //its a constant
+ document.createTextNode(symbol.output)),str];
+ }
+}
+
+function AMparseIexpr(str) {
+ var symbol, sym1, sym2, node, result, underover;
+ str = AMremoveCharsAndBlanks(str,0);
+ sym1 = AMgetSymbol(str);
+ result = AMparseSexpr(str);
+ node = result[0];
+ str = result[1];
+ symbol = AMgetSymbol(str);
+ if (symbol.ttype == INFIX && symbol.input != "/") {
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+// if (symbol.input == "/") result = AMparseIexpr(str); else ...
+ result = AMparseSexpr(str);
+ if (result[0] == null) // show box in place of missing argument
+ result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1"));
+ else AMremoveBrackets(result[0]);
+ str = result[1];
+// if (symbol.input == "/") AMremoveBrackets(node);
+ if (symbol.input == "_") {
+ sym2 = AMgetSymbol(str);
+ underover = (sym1.ttype == UNDEROVER);
+ if (sym2.input == "^") {
+ str = AMremoveCharsAndBlanks(str,sym2.input.length);
+ var res2 = AMparseSexpr(str);
+ AMremoveBrackets(res2[0]);
+ str = res2[1];
+ node = AMcreateMmlNode((underover?"munderover":"msubsup"),node);
+ node.appendChild(result[0]);
+ node.appendChild(res2[0]);
+ node = AMcreateMmlNode("mrow",node); // so sum does not stretch
+ } else {
+ node = AMcreateMmlNode((underover?"munder":"msub"),node);
+ node.appendChild(result[0]);
+ }
+ } else {
+ node = AMcreateMmlNode(symbol.tag,node);
+ node.appendChild(result[0]);
+ }
+ }
+ return [node,str];
+}
+
+function AMparseExpr(str,rightbracket) {
+ var symbol, node, result, i, /*nodeList = [],*//*DPVC*/
+ newFrag = document.createDocumentFragment();
+ do {
+ str = AMremoveCharsAndBlanks(str,0);
+ result = AMparseIexpr(str);
+ node = result[0];
+ str = result[1];
+ symbol = AMgetSymbol(str);
+ if (symbol.ttype == INFIX && symbol.input == "/") {
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ result = AMparseIexpr(str);
+ if (result[0] == null) // show box in place of missing argument
+ result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1"));
+ else AMremoveBrackets(result[0]);
+ str = result[1];
+ AMremoveBrackets(node);
+ node = AMcreateMmlNode(symbol.tag,node);
+ node.appendChild(result[0]);
+ newFrag.appendChild(node);
+ symbol = AMgetSymbol(str);
+ }
+ else if (node!=undefined) newFrag.appendChild(node);
+ } while ((symbol.ttype != RIGHTBRACKET &&
+ (symbol.ttype != LEFTRIGHT || rightbracket)
+ || AMnestingDepth == 0) && symbol!=null && symbol.output!="");
+ if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {
+// if (AMnestingDepth > 0) AMnestingDepth--;
+ var len = newFrag.childNodes.length;
+ if (len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 &&
+ newFrag.childNodes[len-2].nodeName == "mo" &&
+ newFrag.childNodes[len-2].firstChild.nodeValue == ",") { //matrix
+ var right = newFrag.childNodes[len-1].lastChild.firstChild.nodeValue;
+ if (right==")" || right=="]") {
+ var left = newFrag.childNodes[len-1].firstChild.firstChild.nodeValue;
+ if (left=="(" && right==")" && symbol.output != "}" ||
+ left=="[" && right=="]") {
+ var pos = []; // positions of commas
+ var matrix = true;
+ var m = newFrag.childNodes.length;
+ for (i=0; matrix && i<m; i=i+2) {
+ pos[i] = [];
+ node = newFrag.childNodes[i];
+ if (matrix) matrix = node.nodeName=="mrow" &&
+ (i==m-1 || node.nextSibling.nodeName=="mo" &&
+ node.nextSibling.firstChild.nodeValue==",")&&
+ node.firstChild.firstChild.nodeValue==left &&
+ node.lastChild.firstChild.nodeValue==right;
+ if (matrix)
+ for (var j=0; j<node.childNodes.length; j++)
+ if (node.childNodes[j].firstChild.nodeValue==",")
+ pos[i][pos[i].length]=j;
+ if (matrix && i>1) matrix = pos[i].length == pos[i-2].length;
+ }
+ if (matrix) {
+ var row, frag, n, k, table = document.createDocumentFragment();
+ for (i=0; i<m; i=i+2) {
+ row = document.createDocumentFragment();
+ frag = document.createDocumentFragment();
+ node = newFrag.firstChild; // <mrow>(-,-,...,-,-)</mrow>
+ n = node.childNodes.length;
+ k = 0;
+ node.removeChild(node.firstChild); //remove (
+ for (j=1; j<n-1; j++) {
+ if (typeof pos[i][k] != "undefined" && j==pos[i][k]){
+ node.removeChild(node.firstChild); //remove ,
+ row.appendChild(AMcreateMmlNode("mtd",frag));
+ k++;
+ } else frag.appendChild(node.firstChild);
+ }
+ row.appendChild(AMcreateMmlNode("mtd",frag));
+ if (newFrag.childNodes.length>2) {
+ newFrag.removeChild(newFrag.firstChild); //remove <mrow>)</mrow>
+ newFrag.removeChild(newFrag.firstChild); //remove <mo>,</mo>
+ }
+ table.appendChild(AMcreateMmlNode("mtr",row));
+ }
+ node = AMcreateMmlNode("mtable",table);
+ if (typeof symbol.invisible == "boolean" && symbol.invisible) node.setAttribute("columnalign","left");
+ newFrag.replaceChild(node,newFrag.firstChild);
+ }
+ }
+ }
+ }
+ str = AMremoveCharsAndBlanks(str,symbol.input.length);
+ if (typeof symbol.invisible != "boolean" || !symbol.invisible) {
+ node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
+ newFrag.appendChild(node);
+ }
+ }
+ return [newFrag,str];
+}
+
+function AMparseMath(str) {
+ var /*result,*//*DPVC*/ node = AMcreateElementMathML("mstyle");
+ if (mathcolor != "") node.setAttribute("mathcolor",mathcolor);
+ if (displaystyle) node.setAttribute("displaystyle","true");
+ if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily);
+ AMnestingDepth = 0;
+ node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false)[0]);
+ node = AMcreateMmlNode("math",node);
+ if (showasciiformulaonhover) //fixed by djhsu so newline
+ node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko
+ if (mathfontfamily != "" && (isIE || mathfontfamily != "serif")) {
+ var fnode = AMcreateElementXHTML("font");
+ fnode.setAttribute("face",mathfontfamily);
+ fnode.appendChild(node);
+ return fnode;
+ }
+ return node;
+}
+
+/*
+ * function AMstrarr2docFrag(arr, linebreaks) {
+ * var newFrag=document.createDocumentFragment();
+ * var expr = false;
+ * for (var i=0; i<arr.length; i++) {
+ * if (expr) newFrag.appendChild(AMparseMath(arr[i]));
+ * else {
+ * var arri = (linebreaks ? arr[i].split("\n\n") : [arr[i]]);
+ * newFrag.appendChild(AMcreateElementXHTML("span").
+ * appendChild(document.createTextNode(arri[0])));
+ * for (var j=1; j<arri.length; j++) {
+ * newFrag.appendChild(AMcreateElementXHTML("p"));
+ * newFrag.appendChild(AMcreateElementXHTML("span").
+ * appendChild(document.createTextNode(arri[j])));
+ * }
+ * }
+ * expr = !expr;
+ * }
+ * return newFrag;
+ * }
+ *
+ * function AMprocessNodeR(n, linebreaks) {
+ * var mtch, str, arr, frg, i;
+ * if (n.childNodes.length == 0) {
+ * if ((n.nodeType!=8 || linebreaks) &&
+ * n.parentNode.nodeName!="form" && n.parentNode.nodeName!="FORM" &&
+ * n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" &&
+ * n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE") {
+ * str = n.nodeValue;
+ * if (!(str == null)) {
+ * str = str.replace(/\r\n\r\n/g,"\n\n");
+ * if (doubleblankmathdelimiter) {
+ * str = str.replace(/\x20\x20\./g," "+AMdelimiter1+".");
+ * str = str.replace(/\x20\x20,/g," "+AMdelimiter1+",");
+ * str = str.replace(/\x20\x20/g," "+AMdelimiter1+" ");
+ * }
+ * str = str.replace(/\x20+/g," ");
+ * str = str.replace(/\s*\r\n/g," ");
+ * mtch = false;
+ * str = str.replace(new RegExp(AMescape2, "g"),
+ * function(st){mtch=true;return "AMescape2"});
+ * str = str.replace(new RegExp(AMescape1, "g"),
+ * function(st){mtch=true;return "AMescape1"});
+ * str = str.replace(new RegExp(AMdelimiter2regexp, "g"),AMdelimiter1);
+ * arr = str.split(AMdelimiter1);
+ * for (i=0; i<arr.length; i++)
+ * arr[i]=arr[i].replace(/AMescape2/g,AMdelimiter2).
+ * replace(/AMescape1/g,AMdelimiter1);
+ * if (arr.length>1 || mtch) {
+ * if (checkForMathML) {
+ * checkForMathML = false;
+ * var nd = AMisMathMLavailable();
+ * AMnoMathML = nd != null;
+ * if (AMnoMathML && notifyIfNoMathML)
+ * if (alertIfNoMathML)
+ * alert("To view the ASCIIMathML notation use Internet Explorer 6 +\nMathPlayer (free from www.dessci.com)\n\
+ * or Firefox/Mozilla/Netscape");
+ * else AMbody.insertBefore(nd,AMbody.childNodes[0]);
+ * }
+ * if (!AMnoMathML) {
+ * frg = AMstrarr2docFrag(arr,n.nodeType==8);
+ * var len = frg.childNodes.length;
+ * n.parentNode.replaceChild(frg,n);
+ * return len-1;
+ * } else return 0;
+ * }
+ * }
+ * } else return 0;
+ * } else if (n.nodeName!="math") {
+ * for (i=0; i<n.childNodes.length; i++)
+ * i += AMprocessNodeR(n.childNodes[i], linebreaks);
+ * }
+ * return 0;
+ * }
+ *
+ * function AMprocessNode(n, linebreaks, spanclassAM) {
+ * var frag,st;
+ * if (spanclassAM!=null) {
+ * frag = document.getElementsByTagName("span")
+ * for (var i=0;i<frag.length;i++)
+ * if (frag[i].className == "AM")
+ * AMprocessNodeR(frag[i],linebreaks);
+ * } else {
+ * try {
+ * st = n.innerHTML;
+ * } catch(err) {}
+ * if (st==null ||
+ * st.indexOf(AMdelimiter1)!=-1 || st.indexOf(AMdelimiter2)!=-1)
+ * AMprocessNodeR(n,linebreaks);
+ * }
+ * if (isIE) { //needed to match size and font of formula to surrounding text
+ * frag = document.getElementsByTagName('math');
+ * for (var i=0;i<frag.length;i++) frag[i].update()
+ * }
+ * }
+ *
+ * var AMbody;
+ * var AMnoMathML = false, AMtranslated = false;
+ *
+ * function translate(spanclassAM) {
+ * if (!AMtranslated) { // run this only once
+ * AMtranslated = true;
+ * AMinitSymbols();
+ * AMbody = document.getElementsByTagName("body")[0];
+ * AMprocessNode(AMbody, false, spanclassAM);
+ * }
+ * }
+ *
+ * if (isIE) { // avoid adding MathPlayer info explicitly to each webpage
+ * document.write("<object id=\"mathplayer\"\
+ * classid=\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\"></object>");
+ * document.write("<?import namespace=\"m\" implementation=\"#mathplayer\"?>");
+ * }
+ *
+ * // GO1.1 Generic onload by Brothercake
+ * // http://www.brothercake.com/
+ * //onload function (replaces the onload="translate()" in the <body> tag)
+ * function generic()
+ * {
+ * translate();
+ * };
+ * //setup onload function
+ * if(typeof window.addEventListener != 'undefined')
+ * {
+ * //.. gecko, safari, konqueror and standard
+ * window.addEventListener('load', generic, false);
+ * }
+ * else if(typeof document.addEventListener != 'undefined')
+ * {
+ * //.. opera 7
+ * document.addEventListener('load', generic, false);
+ * }
+ * else if(typeof window.attachEvent != 'undefined')
+ * {
+ * //.. win/ie
+ * window.attachEvent('onload', generic);
+ * }
+ * //** remove this condition to degrade older browsers
+ * else
+ * {
+ * //.. mac/ie5 and anything else that gets this far
+ * //if there's an existing onload function
+ * if(typeof window.onload == 'function')
+ * {
+ * //store it
+ * var existing = onload;
+ * //add new onload handler
+ * window.onload = function()
+ * {
+ * //call existing onload function
+ * existing();
+ * //call generic onload function
+ * generic();
+ * };
+ * }
+ * else
+ * {
+ * //setup onload function
+ * window.onload = generic;
+ * }
+ * }
+ */
+
+/******************************************************************
+ *
+ * The previous section is ASCIIMathML.js Version 1.4.7
+ * (c) Peter Jipsen, used with permission.
+ *
+ ******************************************************************/
+
+showasciiformulaonhover = false;
+mathfontfamily = "";
+mathcolor = "";
+
+//
+// Remove remapping of mathvariants to plane1 (MathJax handles that)
+// Change functions to mi rather than mo (to get spacing right)
+//
+(function () {
+ for (var i = 0, m = AMsymbols.length; i < m; i++) {
+ if (AMsymbols[i].codes) {delete AMsymbols[i].codes}
+ if (AMsymbols[i].func) {AMsymbols[i].tag = "mi"}
+ }
+})();
+
+//
+// Add some missing symbols
+//
+AMsymbols.push(
+ {input:"gt", tag:"mo", output:">", tex:null, ttype:CONST},
+ {input:"gt=", tag:"mo", output:"\u2265", tex:"geq", ttype:CONST},
+ {input:"-<=", tag:"mo", output:"\u2AAF", tex:"preceq", ttype:CONST},
+ {input:">-=", tag:"mo", output:"\u2AB0", tex:"succeq", ttype:CONST},
+ {input:"'", tag:"mo", output:"\u2032", tex:"prime", ttype:CONST},
+ {input:"arcsin", tag:"mi", output:"arcsin", tex:null, ttype:UNARY, func:true},
+ {input:"arccos", tag:"mi", output:"arccos", tex:null, ttype:UNARY, func:true},
+ {input:"arctan", tag:"mi", output:"arctan", tex:null, ttype:UNARY, func:true},
+ {input:"coth", tag:"mi", output:"coth", tex:null, ttype:UNARY, func:true},
+ {input:"sech", tag:"mi", output:"sech", tex:null, ttype:UNARY, func:true},
+ {input:"csch", tag:"mi", output:"csch", tex:null, ttype:UNARY, func:true},
+ {input:"abs", tag:"mi", output:"abs", tex:null, ttype:UNARY, func:true},
+ {input:"exp", tag:"mi", output:"exp", tex:null, ttype:UNARY, func:true},
+ {input:"tilde", tag:"mover", output:"~", tex:null, ttype:UNARY, acc:true}
+)
+
+//
+// Access to AsciiMath functions and values
+//
+ASCIIMATH.Augment({
+ AM: {
+ Init: function () {
+ displaystyle = ASCIIMATH.config.displaystyle;
+ decimal = ASCIIMATH.config.decimal;
+ INITASCIIMATH();
+ AMinitSymbols();
+ },
+ Augment: function (def) {
+ for (var id in def) {if (def.hasOwnProperty(id)) {
+ switch (id) {
+ case "displaystyle": displaystyle = def[id]; break;
+ case "decimal": decimal = def[id]; break;
+ case "parseMath": AMparseMath = def[id]; break;
+ case "parseExpr": AMparseExpr = def[id]; break;
+ case "parseIexpr": AMparseIexpr = def[id]; break;
+ case "parseSexpr": AMparseSexpr = def[id]; break;
+ case "removeBrackets": AMremoveBrackets = def[id]; break;
+ case "getSymbol": AMgetSymbol = def[id]; break;
+ case "position": AMposition = def[id]; break;
+ case "removeCharsAndBlanks": AMremoveCharsAndBlanks = def[id]; break;
+ case "createMmlNode": AMcreateMmlNode = def[id]; break;
+ case "createElementMathML": AMcreateElementMathML = def[id]; break;
+ case "createElementXHTML": AMcreateElementXHTML = def[id]; break;
+ case "initSymbols": AMinitSymbols = def[id]; break;
+ case "compareNames": comareNames = def[id]; break;
+ };
+ this[id] = def[id];
+ }};
+ },
+ parseMath: AMparseMath,
+ parseExpr: AMparseExpr,
+ parseIexpr: AMparseIexpr,
+ parseSexr: AMparseSexpr,
+ removeBrackets: AMremoveBrackets,
+ getSymbol: AMgetSymbol,
+ position: AMposition,
+ removeCharsAndBlanks: AMremoveCharsAndBlanks,
+ createMmlNode: AMcreateMmlNode,
+ createElementMathML: AMcreateElementMathML,
+ createElementXHTML: AMcreateElementXHTML,
+ initSymbols: AMinitSymbols,
+ compareNames: compareNames,
+
+ createDocumentFragment: DOCFRAG,
+ document: document,
+
+ define: newcommand,
+ symbols: AMsymbols,
+ names: AMnames,
+
+ TOKEN: {
+ CONST:CONST, UNARY:UNARY, BINARY:BINARY, INFIX:INFIX,
+ LEFTBRACKET:LEFTBRACKET, RIGHTBRACKET:RIGHTBRACKET, SPACE:SPACE,
+ UNDEROVER:UNDEROVER, DEFINITION:DEFINITION, LEFTRIGHT:LEFTRIGHT, TEXT:TEXT
+ }
+ }
+});
+
+//
+// Make minimizer think these have been used
+var junk = [
+ window, navigator //,
+// checkForMathML, notifyIfNoMathML, alertIfNoMathML, AMdelimiter1, AMescape1,
+// AMdelimiter2, AMescape2, AMdelimiter2regexp, doubleblankmathdelimiter
+];
+junk = null;
+
+})(MathJax.InputJax.AsciiMath);
+
+
+/************************************************************************/
+
+(function (ASCIIMATH) {
+ var MML;
+
+ ASCIIMATH.Augment({
+ sourceMenuTitle: "AsciiMath input",
+
+ prefilterHooks: MathJax.Callback.Hooks(true), // hooks to run before processing AsciiMath
+ postfilterHooks: MathJax.Callback.Hooks(true), // hooks to run after processing AsciiMath
+
+ Translate: function (script) {
+ var mml, math = script.innerHTML.replace(/^\s+/,"").replace(/\s+$/,"");
+ var data = {math:math, script:script};
+ this.prefilterHooks.Execute(data); math = data.math;
+ try {
+ mml = this.AM.parseMath(math);
+ } catch(err) {
+ if (!err.asciimathError) {throw err}
+ mml = this.formatError(err,math);
+ }
+ data.math = MML(mml); this.postfilterHooks.Execute(data);
+ return data.math;
+ },
+ formatError: function (err,math,script) {
+ var message = err.message.replace(/\n.*/,"");
+ MathJax.Hub.signal.Post(["AsciiMath Jax - parse error",message,math,script]);
+ return MML.merror(message);
+ },
+ Error: function (message) {
+ throw MathJax.Hub.Insert(Error(message),{asciimathError: true});
+ },
+ //
+ // Initialize the MML variable and AsciiMath itself
+ //
+ Startup: function () {
+ MML = MathJax.ElementJax.mml;
+ this.AM.Init();
+ }
+ });
+
+ ASCIIMATH.loadComplete("jax.js");
+
+})(MathJax.InputJax.AsciiMath);
+
+
+