lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/jax.js in gollum-1.1.1 vs lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/jax.js in gollum-1.2.0
- old
+ new
@@ -1,1652 +1,19 @@
-/*************************************************************
- *
- * MathJax/jax/input/TeX/jax.js
+/*
+ * ../SourceForge/trunk/mathjax/jax/input/TeX/jax.js
*
- * Implements the TeX InputJax that reads mathematics in
- * TeX and LaTeX format and converts it to the MML ElementJax
- * internal format.
+ * Copyright (c) 2010 Design Science, Inc.
*
- * ---------------------------------------------------------------------
- *
- * Copyright (c) 2009-2010 Design Science, Inc.
+ * Part of the MathJax library.
+ * See http://www.mathjax.org for details.
*
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed under the Apache License, Version 2.0;
* 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 (TEX) {
- var TRUE = true, FALSE = false, MML;
-
- TEX.Stack = MathJax.Object.Subclass({
- Init: function (env) {
- this.global = {};
- this.data = [STACKITEM.start().With({global: this.global})];
- if (env) {this.data[0].env = env}
- this.env = this.data[0].env;
- },
- Push: function () {
- var i, m, item, top;
- for (i = 0, m = arguments.length; i < m; i++) {
- item = arguments[i];
- if (item instanceof MML.mbase) {item = STACKITEM.mml(item)}
- item.global = this.global;
- top = (this.data.length ? this.Top().checkItem(item) : TRUE);
- if (top instanceof Array) {this.Pop(); this.Push.apply(this,top)}
- else if (top instanceof STACKITEM) {this.Pop(); this.Push(top)}
- else if (top) {
- this.data.push(item);
- if (item.env) {
- for (var id in this.env)
- {if (this.env.hasOwnProperty(id)) {item.env[id] = this.env[id]}}
- this.env = item.env;
- } else {item.env = this.env}
- }
- }
- },
- Pop: function () {
- var item = this.data.pop(); if (!item.isOpen) {delete item.env}
- this.env = (this.data.length ? this.Top().env : {});
- return item;
- },
- Top: function (n) {
- if (n == null) {n = 1}
- if (this.data.length < n) {return null}
- return this.data[this.data.length-n];
- },
- Prev: function (noPop) {
- var top = this.Top();
- if (noPop) {return top.data[top.data.length-1]}
- else {return top.Pop()}
- },
- toString: function () {return "stack[\n "+this.data.join("\n ")+"\n]"}
- });
-
- var STACKITEM = TEX.Stack.Item = MathJax.Object.Subclass({
- type: "base",
- closeError: "Extra close brace or missing open brace",
- rightError: "Missing \\left or extra \\right",
- Init: function () {
- if (this.isOpen) {this.env = {}}
- this.data = [];
- this.Push.apply(this,arguments);
- },
- Push: function () {this.data.push.apply(this.data,arguments)},
- Pop: function () {return this.data.pop()},
- mmlData: function (inferred,forceRow) {
- if (inferred == null) {inferred = TRUE}
- if (this.data.length === 1 && !forceRow) {return this.data[0]}
- return MML.mrow.apply(MML,this.data).With((inferred ? {inferred: TRUE}: {}));
- },
- checkItem: function (item) {
- if (item.type === "over" && this.isOpen) {item.num = this.mmlData(FALSE); this.data = []}
- if (item.type === "cell" && this.isOpen) {TEX.Error("Misplaced "+item.name)}
- if (item.isClose && this[item.type+"Error"]) {TEX.Error(this[item.type+"Error"])}
- if (!item.isNotStack) {return TRUE}
- this.Push(item.data[0]); return FALSE;
- },
- With: function (def) {
- for (var id in def) {if (def.hasOwnProperty(id)) {this[id] = def[id]}}
- return this;
- },
- toString: function () {return this.type+"["+this.data.join("; ")+"]"}
- });
+MathJax.Unpack([
+ ['(','function','(d){var c=true,f=false,i,h=String.fromCharCode(160);var e','=MathJax.Object.Subclass({','Init',':function(k){','this.global','={};','this.data','=[b.','start','().With({global:',6,'})];if(k){',8,'[0].env','=k}','this.env','=',8,15,'},','Push',':function(){','var l,k,n,o;for(','l=0,k=arguments.length;l<k;l++){','n=','arguments[l','];if(n',' instanceof ','i.mbase){n=b.mml(n)}n.global=',6,';o=(',8,'.length','?this.Top().','checkItem','(n):c);if(o',29,'Array','){this.Pop();this.Push','.apply(this',',','o)}else{if(o',29,'b',40,'(',43,'){',8,'.push','(n);if(n.env){','for(var ','p',' in this.env){if(this.env.hasOwnProperty(','p)){n.env[p]=',17,'[p]}}',17,'=n.env}else{n.env=',17,'}}}}}},Pop',23,'var k=',8,'.pop();if(!k.isOpen){delete k.env}',17,'=(',8,34,35,'env:{});','return ','k},Top',5,'if(k==null){k=','1}if(',8,34,'<k){',73,'null}',73,8,'[',8,34,'-k]},Prev',5,'var l=this.Top();if(k){',73,'l.data[l.data',34,'-1]}else{',73,'l.Pop()}},toString',23,'return"stack[\\n "+',8,'.join("\\n ")+"\\n]"}});var b=e.Item',3,'type:"base",closeError:"Extra',' close brace',' or missing',' open brace','",rightError:"Missing \\\\left or extra',' \\\\right",',4,23,'if(','this.isOpen){',17,'={}}',8,'=[];this.',22,41,',arguments)},',22,23,8,51,'.apply(',8,118,'Pop',23,73,8,'.pop()},mmlData:',1,'(k,l){',76,'c}if(',8,34,'===1&&!l){',73,8,'[0]}',73,'i.mrow',123,'i,',8,').With((k?{inferred:c}:{}))},','checkItem:function(','k){if(k.type==="','over"&&',111,'k.num=','this.mmlData','(f);',8,'=[]}if(k','.type==="','cell"&&',111,'d.Error("Misplaced "+k.name)}if(k.isClose&&','this[k.type+"Error','"]){d.Error(',160,'"])}if(!k','.isNotStack){',73,'c}this.',22,'(k.data[0]);',73,'f},With',5,53,'l in k){if(k.hasOwnProperty(l)){this[l]=k[l]}}',73,'this},toString',23,73,'this.type+"["+',8,'.join("; ")+"]"}});b.',10,'=b.Subclass({type:"',10,'",isOpen:c,',147,148,'stop"){','return b.mml(',152,'())}','return this.SUPER(arguments).checkItem.call(this,','k)}});b.','stop',182,193,'",isClose:c});b.','open',182,'open',184,'stopError:"Extra',105,104,103,'",',147,'l){','if(l.type==="','close"){',64,152,'();',188,'i.TeXAtom(','k))}',191,'l)}});b.','close',182,218,196,'subsup',182,222,'",stopError:"Missing superscript or subscript argument",',147,'l){var k=["","subscript","superscript"][this.','position','];',208,'open"||l',156,'left"){',73,'c}',208,'mml"){',8,'[0].SetData(this.',228,',l.data[0]);',188,8,'[0])}if(','this.SUPER(arguments).',36,'.call(this,l)){','d.Error("Missing',105,' for "+k)}},Pop:',1,'(){}});b.over',182,'over",isClose:c,name:"\\\\over",',147,'m,k){if(m',156,'over"){d.Error("Ambiguous use of "+m.name)}if(m.isClose){var l=i.mfrac(this.num,',152,'(f));if(this.thickness!=null){l.linethickness=this.thickness}','if(this.open||this.close){','l.texClass=i.TEXCLASS.INNER;l.texWithDelims=c;l=i.mfenced(l',').With({open:this.open,close:this.close})}','return[b.mml(','l),m]}',191,'m)},toString',23,'return"over["+this.num+" / "+',8,180,'left',182,'left',184,'delim:"(",',201,' \\\\left',104,107,147,'l){',208,'right"){var ','k=i.mfenced(',8,34,'===1?',8,'[0]:i.mrow',123,'i,',8,'));',188,'k.With({open:this.delim,',218,':l.delim}))}',191,217,'right',182,'right",isClose:c,delim:")"});b.begin',182,'begin',184,147,148,'end"){if(k.name!==this.name){d.Error("\\\\begin{"+this.name+"} ended with \\\\end{"+k.name+"}")}if(!this.end){',188,152,'())}',73,'this.parse[this.end].call(this.parse,this,',8,')}if(k',156,187,248,' \\\\end{"+this.name+"}")}',191,192,'end',182,'end',196,'style',182,'style",',147,'l){if(!l.isClose){',191,'l)}',64,'i.mstyle',123,'i,',8,').With(this.','styles);',264,'k),l]}});b.',228,182,228,'",',147,'l){if(l.isClose){',248,' box for "+this.name)}if(l',164,64,'l.mmlData();switch(this.move){case"vertical":k=i.mpadded(k).With({height:this.dh,depth:this.dd,voffset:this.dh});',264,'k)];case"horizontal":',264,'this.left),l,b.mml(this.right)]}}',191,217,'array',182,'array',184,'arraydef:{},',4,23,'this.table','=[];','this.row','=[];',17,7,245,4,41,118,147,348,'if(l.isEntry','){this.EndEntry();this.','clearEnv();return f}','if(l.isCR',380,'EndRow();this.',381,'this.EndTable();this.clearEnv();',64,'i.mtable',123,'i,',367,339,'arraydef);',261,285,'k',263,'k=b.mml(k);if(this.requireClose){',208,209,73,'k}',248,103,'")}return[k,l]}',191,'l)},EndEntry',23,369,51,'(i.mtd',123,'i,',8,'));',8,'=[]},EndRow',23,367,51,'(i.mtr',123,'i,',369,'));',369,'=[]},EndTable',23,'if(',8,34,'||',369,34,380,'EndRow()}this.checkLines()},checkLines',23,'if(','this.arraydef.rowlines','){',64,439,'.split(/ /);if(k',34,'===',367,34,'){this.arraydef.frame=k.pop();',439,'=k.join(" ")}else{if(k',34,'<',367,34,'-1){',439,'+=" none"}}}},clearEnv',23,53,'k',55,'k)){delete ',17,'[k]}}}});b.cell',182,'cell',196,'mml',182,'mml",isNotStack:c,',22,23,53,25,'if(',27,'].type!=="mo"&&',27,'].isEmbellished()){',27,']=',214,27,']).With({isEmbellishedWrapper:c})}}',8,51,123,8,118,'Add',23,8,51,123,8,',arguments);',73,'this}});var g',7,'var j=',1,'(){i=MathJax.ElementJax.mml;MathJax.Hub.Insert(g,{letter:/[a-z]/i,digit:/[0-9.]/,number:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)*|\\.[0-9]+)/,special:{"\\\\":"ControlSequence","{":"Open","}":"Close","~":"Tilde","^":"Superscript",_:"Subscript"," ":"Space","\\t":"Space","\\r":"Space","\\n":"Space","\'":"Prime","%":"Comment","&":"Entry","#":"Hash","\\u2019":"Prime"},remap:{"-":"2212","*":"2217"},mathchar0mi:{alpha:"03B1",beta:"03B2",gamma:"03B3",delta:"03B4",epsilon:"03F5",zeta:"03B6",eta:"03B7",theta:"03B8",iota:"03B9",kappa:"03BA",lambda:"03BB",mu:"03BC",nu:"03BD",xi:"03BE",omicron:"03BF",pi:"03C0",rho:"03C1",sigma:"03C3",tau:"03C4",upsilon:"03C5",phi:"03D5",chi:"03C7",psi:"03C8",omega:"03C9",varepsilon:"03B5",vartheta:"03D1",varpi:"03D6",varrho:"03F1",varsigma:"03C2",varphi:"03C6",S:"00A7",aleph:["2135','",{mathvariant:i.VARIANT.NORMAL}],','hbar:"210F",imath:"0131",jmath:"0237",ell:"2113",wp:["2118',503,'Re:["211C',503,'Im:["2111',503,'partial:["2202',503,'infty:["221E',503,'prime:["2032',503,'emptyset:["2205',503,'nabla:["2207',503,'top:["22A4',503,'bot:["22A5',503,'angle:["2220',503,'triangle:["25B3',503,'backslash:["2216',503,'forall:["2200',503,'exists:["2203',503,'neg:["00AC',503,'lnot:["00AC',503,'flat:["266D',503,'natural:["266E',503,'sharp:["266F',503,'clubsuit:["2663',503,'diamondsuit:["2662',503,'heartsuit:["2661',503,'spadesuit:["2660",{mathvariant:i.VARIANT.NORMAL}]},mathchar0mo:{surd:"221A",coprod:["2210','",{texClass:i.TEXCLASS.OP,movesupsub:c','}],bigvee:["22C1',551,'}],bigwedge:["22C0',551,'}],biguplus:["2A04',551,'}],bigcap:["22C2',551,'}],bigcup:["22C3',551,'}],"int":["222B",{','texClass:i.TEXCLASS.','OP}],intop:["222B',551,',movablelimits:c}],iint:["222C",{',563,'OP}],iiint:["222D",{',563,'OP}],prod:["220F',551,'}],sum:["2211',551,'}],bigotimes:["2A02',551,'}],bigoplus:["2A01',551,'}],bigodot:["2A00',551,'}],oint:["222E",{',563,'OP}],bigsqcup:["2A06',551,'}],smallint:["222B','",{largeop:f}],','triangleleft:"25C3",triangleright:"25B9",bigtriangleup:"25B3",bigtriangledown:"25BD",wedge:"2227",land:"2227",vee:"2228",lor:"2228",cap:"2229",cup:"222A",ddagger:"2021",dagger:"2020",sqcap:"2293",sqcup:"2294",uplus:"228E",amalg:"2A3F",diamond:"22C4",bullet:"2219",wr:"2240",div:"00F7",odot:["2299',585,'oslash:["2298',585,'otimes:["2297',585,'ominus:["2296',585,'oplus:["2295',585,'mp:"2213",pm:"00B1",circ:"2218",bigcirc:"25EF",setminus:"2216",cdot:"22C5",ast:"2217",times:"00D7",star:"22C6",propto:"221D",sqsubseteq:"2291",sqsupseteq:"2292",parallel:"2225",mid:"2223",dashv:"22A3",vdash:"22A2",leq:"2264",le:"2264",geq:"2265",ge:"2265",lt:"003C",gt:"003E",succ:"227B",prec:"227A",approx:"2248",succeq:"2AB0",preceq:"2AAF",supset:"2283",subset:"2282",supseteq:"2287",subseteq:"2286","in":"2208",ni:"220B",notin:"2209",owns:"220B",gg:"226B",ll:"226A",sim:"223C",simeq:"2243",perp:"22A5",equiv:"2261",asymp:"224D",smile:"2323",frown:"2322",ne:"2260",neq:"2260",cong:"2245",doteq:"2250",bowtie:"22C8",models:"22A8",notChar:"0338",Leftrightarrow:"21D4",Leftarrow:"21D0",Rightarrow:"21D2",leftrightarrow:"2194",leftarrow:"2190",gets:"2190",rightarrow:"2192",to:"2192",mapsto:"21A6",leftharpoonup:"21BC",leftharpoondown:"21BD",rightharpoonup:"21C0",rightharpoondown:"21C1",nearrow:"2197",searrow:"2198",nwarrow:"2196",swarrow:"2199",rightleftharpoons:"21CC",hookrightarrow:"21AA",hookleftarrow:"21A9",longleftarrow:"27F5",Longleftarrow:"27F8",longrightarrow:"27F6",Longrightarrow:"27F9",','Longleftrightarrow',':"27FA",longleftrightarrow:"27F7",longmapsto:"27FC",ldots:"2026",cdots:"22EF",vdots:"22EE",ddots:"22F1",dots:"2026",dotsc:"2026",dotsb:"22EF",dotsm:"22EF",dotsi:"22EF",dotso:"2026",ldotp:["002E",{',563,'PUNCT}],cdotp:["22C5",{',563,'PUNCT}],colon:["003A",{',563,'PUNCT}]},mathchar7:{Gamma:"0393",Delta:"0394",Theta:"0398",Lambda:"039B",Xi:"039E",Pi:"03A0",Sigma:"03A3",Upsilon:"03A5",Phi:"03A6",Psi:"03A8",Omega:"03A9",_:"005F","#":"0023","$":"0024","%":"0025","&":"0026",And:"0026"},delimiter:{"(":"(",")":")","[":"[","]":"]","<":"27E8",">":"27E9","\\\\lt":"27E8","\\\\gt":"27E9","/":"/","|":["|",{',563,'ORD}],".":"","\\\\\\\\":"\\\\","\\\\lmoustache":"23B0","\\\\rmoustache":"23B1","\\\\lgroup":"27EE","\\\\rgroup":"27EF","\\\\arrowvert":"23D0","\\\\Arrowvert":"2016","\\\\bracevert":"23AA","\\\\Vert":["2225",{',563,'ORD}],"\\\\|":["2225",{',563,'ORD}],"\\\\','vert":["|",{',563,610,'uparrow":"2191","\\\\downarrow":"2193","\\\\updownarrow":"2195","\\\\Uparrow":"21D1","\\\\Downarrow":"21D3","\\\\Updownarrow":"21D5","\\\\backslash":"\\\\","\\\\rangle":"27E9","\\\\langle":"27E8","\\\\rbrace":"}","\\\\lbrace":"{","\\\\}":"}","\\\\{":"{","\\\\rceil":"2309","\\\\lceil":"2308","\\\\rfloor":"230B","\\\\lfloor":"230A","\\\\lbrack":"[","\\\\rbrack":"]"},macros:{displaystyle',':["SetStyle","','D",c,0],textstyle',615,'T",f,0],scriptstyle',615,'S",f,1],scriptscriptstyle',615,'SS",f,2],rm',':["SetFont",i.VARIANT.','NORMAL],mit',623,'ITALIC],oldstyle',623,'OLDSTYLE],cal',623,'CALIGRAPHIC],it',623,'ITALIC],bf',623,'BOLD],bbFont',623,'DOUBLESTRUCK],scr',623,'SCRIPT],frak',623,'FRAKTUR],sf',623,'SANSSERIF],tt',623,'MONOSPACE],tiny',':["SetSize",','0.5],Tiny',645,'0.6],scriptsize',645,'0.7],small',645,'0.85],normalsize',645,'1],large',645,'1.2],Large',645,'1.44],LARGE',645,'1.73],huge',645,'2.07],Huge',645,'2.49],arcsin',':["NamedOp",0],','arccos',665,'arctan',665,'arg',665,'cos',665,'cosh',665,'cot',665,'coth',665,'csc',665,'deg',665,'det',':"NamedOp",','dim',665,'exp',665,'gcd',685,'hom',665,'inf',685,'ker',665,'lg',665,'lim',685,'liminf',':["NamedOp",null,"lim ','inf"],limsup',703,'sup"],ln',665,'log',665,'max',685,'min',685,'Pr',685,'sec',665,'sin',665,'sinh',665,'sup',685,'tan',665,'tanh',665,'limits:["Limits",1],nolimits:["Limits",0],overline',':["UnderOver","','203E"],underline',729,'005F"],overbrace',729,'23DE",1],underbrace',729,'23DF",1],overrightarrow',729,'2192"],underrightarrow',729,'2192"],overleftarrow',729,'2190"],underleftarrow',729,'2190"],overleftrightarrow',729,'2194"],underleftrightarrow',729,'2194"],overset:"Overset",underset:"Underset",stackrel',':["Macro","\\\\','mathrel{\\\\','mathop{#2}\\\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft',':"MoveLeftRight','",moveright',752,'",",":["','Spacer",i.LENGTH.','THINMATHSPACE','],":":["',756,757,'],">":["',756,'MEDIUMMATHSPACE],";":["',756,'THICKMATHSPACE','],"!":["',756,'NEGATIVETHINMATHSPACE],','enspace:["Spacer",".5em"],quad:["Spacer","1em"],qquad:["Spacer","2em"],thinspace:["',756,757,'],negthinspace:["',756,768,'hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",Rule:["Rule"],Space:["Rule","blank"],big',':["MakeBig",i.TEXCLASS.','ORD,0.85],Big',776,'ORD,1.15],bigg',776,'ORD,1.45],Bigg',776,'ORD,1.75],bigl',776,'OPEN,0.85],Bigl',776,'OPEN,1.','15],biggl',776,787,'45],Biggl',776,787,'75],bigr',776,'CLOSE,0.85],Bigr',776,'CLOSE,1.','15],biggr',776,798,'45],Biggr',776,798,'75],bigm',776,'REL,0.85],Bigm',776,'REL,1.15],biggm',776,'REL,1.45],Biggm',776,'REL,1.75],mathord',':["TeXAtom",i.TEXCLASS.','ORD],mathop',814,'OP],mathopen',814,'OPEN],mathclose',814,'CLOSE],mathbin',814,'BIN],mathrel',814,'REL],mathpunct',814,'PUNCT],mathinner',814,'INNER],vcenter',814,'VCENTER],','mathchoice',':["Extension","',832,'"],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",strut:"Strut",mathstrut',749,'vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute',':["Accent","','02CA"],grave',838,'02CB"],ddot',838,'00A8"],tilde',838,'02DC"],bar',838,'02C9"],breve',838,'02D8"],check',838,'02C7"],hat',838,'02C6"],vec',838,'20D7"],dot',838,'02D9"],widetilde',838,'02DC",1],widehat',838,'02C6",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em"],eqalign',':["Matrix",null,null,"','right left",i.LENGTH.',765,',".5em","D"],','displaylines',862,'center",null',865,'cr:"Cr","\\\\":"Cr",newline:"Cr",hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno',':["Matrix",null,null,"right left right",i.LENGTH.THICKMATHSPACE+" 3em",".5em","D"],','leqalignno',871,'bmod',749,'mathbin{\\\\rm mod}"],pmod',749,'pod{{\\\\rm mod}\\\\kern 6mu',' #1}",1],','mod',749,'mathchoice{\\\\kern18mu}{\\\\','kern12mu}{\\\\',883,883,'rm mod}\\\\,\\\\,#1",1],pod',749,882,'kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)",1],iff:["Macro","\\\\;\\\\',597,'\\\\;"],skew:["Macro","{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}",3],mathcal',':["Macro","{\\\\','cal',879,'mathscr',892,'scr',879,'mathrm',892,'rm',879,'mathbf',892,'bf',879,'mathbb',892,'bbFont #1}",1],','Bbb',892,909,'mathit',892,'it',879,'mathfrak',892,'frak',879,'mathsf',892,'sf',879,'mathtt',892,'tt',879,'textrm',749,'mathord{\\\\','rm\\\\text{#1}}",1],textit',749,931,'it','{\\\\text{#1}}}",1],','textbf',749,931,'bf',936,'pmb',749,'rlap{#1}\\\\kern1px{#1}",1],TeX:["Macro","T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X"],LaTeX:["Macro","L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX"],not',749,750,'rlap{\\\\kern.5em\\\\notChar}}"]," ":["Macro","\\\\text{ }"],space:"Tilde",begin:"Begin",end:"End",newcommand',833,'newcommand"],','renewcommand',833,949,'newenvironment',833,949,'def',833,949,'verb',833,'verb"],','boldsymbol',833,962,'"],tag',833,'AMSmath"],','notag',833,967,'label:["Macro","",1],nonumber:["Macro",""],unicode',833,'unicode"],color:"Color",require:"Require"},environment:{array:["Array"],matrix:["Array",n'],
+ ['ull,null,null,"c"],pmatrix',':["Array",null',',"(",")","c"],bmatrix',1,',"[","]","c"],Bmatrix',1,',"\\\\{","\\\\}","c"],vmatrix',1,',"\\\\vert","\\\\vert","c"],Vmatrix',1,',"\\\\Vert","\\\\Vert","c"],cases',1,',"\\\\{",".","ll",null,".1em"],','eqnarray',':["','Array",null,null,null,"rcl",i.LENGTH.THICKMATHSPACE,".5em","D','"],"',13,'*":["',15,'"],equation:[','null,"Equation',16,'equation*":[',21,'"],align:["','ExtensionEnv",null,"AMSmath',16,'align',18,26,'"],aligned:["',26,'"],','multline',':["',26,16,34,18,26,'"],split:["',26,'"],gather:["',26,16,'gather',18,26,'"],gathered:["',26,'"],alignat:["',26,16,'alignat',18,26,'"],alignedat:["',26,'"]},p_height:1.2/0.85});if(','this.config.Macros','){','var k=',60,';for(var l in k){if(k','.hasOwnProperty(','l)){if(typeof(k[l])==="','string"){','g.macros[l]=["Macro','",k[l]]}else{',68,'"].concat(k[l])}}}}};var a=MathJax.Object.Subclass({Init',':function(','l,m){','this.string=','l;this.i=0;var k;if(m){k={};for(var n in m){if(m',65,'n)){k[n]=m[n]}}}this.stack=d.Stack(k);this.Parse();','this.Push(','b.stop())},Parse',':function(){','var k;','while(this.i<this.string.length','){k=','this.string.charAt(this.i','++);if(g.special[k]){this[g.special[k]](k)}','else{if(','g.letter','.test(k)){this.','Variable','(k)}',86,'g.digit',88,'Number(k)}','else{this.','Other(k)}}}}},Push',80,'this.stack.','Push.apply(this','.stack,arguments)},mml',80,'if(',98,'Top().type!=="mml"){','return ','null}',105,98,'Top().data[0]},mmlToken',72,'k','){return ','k},ControlSequence',72,'q){',62,'this.GetCS','(),p,n;if(','g.macros[k',']){','var m=',119,'];if(!(m',' instanceof Array',')){m=[m]}','var l=','m[0];if(!(l instanceof Function)){l=this[l]}l.apply(this,["\\\\"+k].concat(m.slice(1)))}',86,'g.mathchar0mi[k',']){p=',129,'];n={','mathvariant:i.VARIANT.','ITALIC};if(p',124,'){n=p[1];p=p[0]}',78,'this.mmlToken(','i.mi','(i.entity("#x"+p)).With(n)))}else{if(g.','mathchar0mo[k',']){p=g.',141,132,'stretchy:','f};if(p',124,'){n=p[1];n.stretchy=f;p=p[0]}',78,138,'i.mo',140,'mathchar7[k',142,153,132,133,'NORMAL','};if(p',124,136,'if(','this.stack.env','.font){','n.','mathvariant','=',163,'.font}',78,138,'i.mi',140,'delimiter["\\\\"+k',']!=null){var o=g.',174,'];n={};if(o',124,'){n=o[1];o=o[0]}if(o.length===4){o=i.entity("#x"+o)}else{o=i.chars(o)}',78,138,'i.mo(o).With({','fence:f,',145,'f}).With(n)))}',95,'csUndefined','("\\\\"+k)}}}}}},',187,72,'k){','d.Error("','Undefined control sequence "+k)},',89,72,'l){var ','k={};if(',163,164,'k.',166,'=',163,169,78,138,'i.mi(i.chars(l)).With(k)))},Number',72,'m){var k,l=','this.string.slice(','this.i-1).match(g.number);if(l){k=i.mn(l[0].replace(/[{}]/g,""));this.i+=l[0].length-1}else{k=','i.mo(i.chars(','m))}if(',163,164,'k.',166,'=',163,169,78,138,'k))},Open',72,'k){',78,'b.open())},Close',72,'k){',78,'b.close())},Tilde',72,'k){',78,'i.mtext(i.chars(','h)))},Space',72,'k){},Superscript',72,'m){var k,l=this.stack.Prev();if(!l){l=i.mi("")}if(l.isEmbellishedWrapper){l=l.data[0].data[0]}if(l.type==="msubsup"){if(l.data[l.','sup]){if(!l.data[l.sup].isPrime){',192,'Double exponent',': use braces to clarify")}','l=i.msubsup(l,null,null',')}k=l.sup','}else{if(l.movesupsub){if(l.type!=="munderover"||l.data[l.','over',']){l=i.munderover(l,null,null).With({movesupsub:c})}k=l.','over}else{',245,');k=l.sup}}',78,'b.subsup(l).With({position:k}))},','Subscript',72,240,'sub]){',192,'Double subscripts',244,'k=l.sub',247,'under',249,'under}else{',245,');k=l.sub}}',78,254,'PRIME:','String.fromCharCode(','8242),SMARTQUOTE:',272,'8217),Prime',72,'m){',126,98,'Prev();if(!l){l=i.mi()}if(l.type==="msubsup"&&l.data[l.sup]){',192,'Prime causes double exponent',244,'var k="";this.i--;do{k+=this.PRIME;this.i++,m=','this.GetNext','()}while(m==="\'"||m===this.SMARTQUOTE);k=',138,212,'k)).With({','isPrime:c,variantForm:d.isSTIX}));',78,'i.msubsup(l,null,k))},Comment',72,'k){',82,'&&',84,')!="\\n"){this.i++}},Hash',72,'k){',192,'You can\'t use \'','macro parameter ','character #\' in math mode")},Other',72,'m){var l={',145,'false},k;if(',163,164,'l.',166,'=',163,169,'if(g.remap[m]){m=g.remap[m];if(m',124,'){l=m[1];m=m[0]}k=','i.mo(i.entity("#x"+','m))}else{k=i.mo(m)}if(k.autoDefault("texClass",true)==""){k=','i.TeXAtom(','k)}',78,138,'k.With(l)))},SetFont',72,'l,k){',163,'.font=k},SetStyle',72,'l,k,m,n){',163,'.style=k;',163,'.level=n;',78,'b.style().With({styles:{','displaystyle',':m,','scriptlevel',':n}}))},SetSize',72,'k,l){',163,'.size=l;',78,337,'mathsize:l+"em"}}))},Color',72,'m){',126,'this.GetArgument(','m);',62,163,'.color;',163,'.color=l;var n=','this.ParseArg(','m);if(k){',163,'.color}','else{delete ',163,362,78,'i.mstyle(n).With({mathcolor:l}))},Spacer',72,343,78,'i.mspace().With({width:','l,','mathsize:i.SIZE.NORMAL,scriptlevel:','1}))},LeftRight',72,'k){',78,'b[k.substr(1)]().With({delim:','this.GetDelimiter(','k)}))},NamedOp',72,'m,l,o){var n=(l!=null&&l===0?f:c);if(!o){o=m.substr(1)}l=((l||l==null)?c:f);o=o.replace(/ /,',272,'8198));',62,182,'movablelimits',':l,','movesupsub',':n',',form:i.FORM.PREFIX,texClass:i.TEXCLASS.OP','});k','.useMMLspacing&=~','k','.SPACE_ATTR.form',';',78,138,'k))},Limits',72,327,121,98,'Prev("nopop");if(m.texClass!==','i.TEXCLASS.OP){','d.Error(l+" is allowed only on operators")}m.',389,'=(k?c:f);m.',387,'=f},Over',72,'m,l,n){',62,'b.over','().With({name:','m});if(l||n){k.open=l;k.close=n}',86,'m.match(/withdelims$/)){k.open=',379,'m);k.close=',379,'m)}}if(','m.match(/^\\\\','above/)){','k.thickness=','this.GetDimen(','m)}',86,423,'atop/)||l||n){',425,'0}}',78,'k)},Frac',72,196,'k=',359,'l);',121,359,'l);',78,'i.mfrac(k,m))},Sqrt',72,196,'m=','this.GetBrackets(','l),k=',359,'l);if(m==""){k=i.msqrt.apply(i,k.array())}else{k=','i.mroot(k,this.parseRoot(m','))}',78,'k)},Root',72,196,'m=','this.GetUpTo(','l,"\\\\of");',62,359,'l);',78,452,')))},parseRoot',72,'p){',126,163,',k=l.inRoot;l.inRoot=true;var o=','d.Parse(','p,l);p=o.mml();',121,'o.stack.global;if(m.leftRoot||m.upRoot){p','=i.mpadded(','p);if(m.leftRoot){p.width=m.leftRoot}if(m.upRoot){p.voffset=m.upRoot;p.height=m.upRoot}}l.inRoot=k;',105,'p},MoveRoot',72,'k,m){if(!',163,'.inRoot){d.Error(k+" can appear only within a root")}if(',98,'global[m]){',192,'Multiple use of "+k)}',126,352,'k);if(!l.match(/-?[0-9]+/)){',192,'The',' argument to "+','k+" must be an integer")}l=(l/15)+"em";if(l.substr(0,1)!=="-"){l="+"+l}',98,'global[m]=l},Accent',72,'m,k,o){var n=',359,'m);',126,138,319,289,'accent:c}));l.stretchy=(o?c:f);',78,'i.munderover(','n,null,l).With({accent:c}))},UnderOver',72,'m,p,k){var o={o:"over",u:"under"}[m.charAt(1)];var n=',359,'m);',126,507,'n,null,null);if(k){l.',389,'=c}l.data[l[o]]=',138,319,'p)).With({',145,'c,accent:(o=="under")}));',78,'l)},Overset',72,'k){',121,359,'k),l=',359,'k);',78,507,'l,null,m))},Underset',72,'k){',121,359,'k),l=',359,'k);',78,507,'l,m,null))},TeXAtom',72,'n,p){var o={texClass:p},m;if(p==',405,'o.',389,'=o.',387,'=c;',62,352,'n);',126,'k.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);if(l){m=',138,'i.mo(l[1]).With({',387,':c,',389,':c,',133,158,391,'}));m',393,'m',395,'}','else{m=',321,472,'k,',163,').mml()).With(o)}}',572,321,359,'n)).With(o)}',78,'m)},Strut',72,'k){',78,'i.mpadded(i.mrow()).With','({height:"8.6pt",depth:"3pt",width:0}))},Phantom',72,'l,k,m){var n=i.mphantom(',359,'l));if(k||m){n',476,'n);if(m){n.height=n.depth=0}if(k){n.width=0}}',78,'n)},Smash',72,'m){',126,'this.trimSpaces(',448,'m));var k',476,359,'m));','switch(','l){case"b":k.depth=0;','break;case','"t":k.height=0;break;default:k.height=k.depth=0}',78,'k)},Lap',72,196,'k',476,359,'l)).With({width:0});if(l==="\\\\llap"){k.lspace="-1 width"}',78,'k)},RaiseLower',72,'k){',126,426,'k);',121,'b.position().With({name:k,move:"','vertical"});if(l.charAt(0)==="-"){l=l.slice(1);k={raise:"\\\\lower",lower:"\\\\raise"}[k.substr(1)]}if(k==="\\\\lower"){m.dh="-"+l;m.dd=l}else{m.dh=l;m.dd="-"+l}',78,'m)},MoveLeftRight',72,'k){var n=',426,'k);var m=(n.charAt(0)==="-"?n.slice(1):"-"+n);if(k==="\\\\moveleft"){',126,'n;n=m;m=l}',78,626,'horizontal",left:',371,'n,',373,'1}),right:',371,'m,',373,'1})}))},Hskip',72,'k){',78,371,426,'k),',373,'0}))},Rule',72,'m,o){',62,426,'m),n=',426,'m),q=',426,'m);var l,p={width:k,height:n,depth:q};if(o!=="blank"){l=',587,'(p);if(parseFloat(k)&&parseFloat(n)+parseFloat(q)){l=i.mstyle(l).With({mathbackground:(',163,'.color||"black")})}}else{l=i.mspace().With(p)}',78,'l)},MakeBig',72,'k,n,l){l*=g.p_height;l=String(l).replace(/(\\.\\d\\d\\d).+/,"$1")+"em";',121,379,'k);',78,321,'i.mo(m).With({minsize:l,maxsize:l,',340,':0,fence:c,',145,'c,symmetric:c})).With({texClass:n}))},BuildRel',72,'k){',126,'this.','ParseUpTo','(k,"\\\\over");',121,359,'k);',78,321,507,'m,null,l)).With({mclass:i.TEXCLASS.REL}))},HBox',72,343,'this.',99,',this.','InternalMath','(',352,'k),l))},FBox',72,'k){',78,'i.menclose.apply(i,this.',700,'(',352,'k))))},Require',72,'k){',126,352,'k);','this.Extension(','null,l)},Extension',72,'k,l,m){','if(k&&!typeof(k)==="',67,'k=k.name}l=d.extensionDir+"/"+l;if(!l.match(/\\.js$/)){l+=".js"}if(!','MathJax.Ajax.','loaded[',724,'fileURL(l)]){if(k!=null){delete g[m||"macros"][k.replace(/^\\\\/,"")]}','MathJax.Hub.','RestartAfter(',724,'Require(l))}},Macro',72,'l,o,n){if(n){var k=[];for(',121,'0;m<n;m++){k.push(',352,'l))}o=this.','SubstituteArgs','(k,o)}',74,'this.AddArgs(','o,',210,'this.i));this.i=0},Matrix',72,'l,n,s,p,q,m,k){var r=',285,'();if(r===""){','d.Error("Missing ','argument for "+l)}','if(r==="{"){this.i++}else{',74,'r+"}"+',210,'this.i+1);this.i=0}var o','=b.array().With({','requireClose:c,arraydef:{rowspacing:(m||"4pt"),','columnspacing:(','q||"1em")}});if(n||s){o.open=n;o.close=s}if(k==="D"){o','.arraydef.',338,'=c}if(p!=null){o',760,'columnalign=p}',78,'o)},Entry',72,'k){',78,'b.cell().With({','isEntry:c,name:k}))},Cr',72,'k){',78,770,'isCR:c,name:k}))},HLine',72,73,'if(m==null){m="solid"}var n=',98,'Top();if(n.type!=="array"||n.data','.length){',192,'Misplaced "+l)}if(n.table.length==0){n',760,'frame=m}else{var k=(n',760,'rowlines','?n',760,788,'.split(/ /):[]);while(k.length<n.table',782,'k.push("none")}k[n.table.length-1]=m;n',760,788,'=k.join(" ")}},Begin',72,196,'m=',352,'l);if(m.match','(/[^a-z*]/i)){d.Error(\'Invalid ','environment',' name "\'+m+\'"\')}if(!g.',804,'[m]){d.Error(\'Unknown ',804,' "\'+m+\'"\')}var n=g.',804,'[m];if(!(n',124,')){n=[n]}',62,'b.begin',415,'m,end:n[1],parse:this});if(n[0]&&this[n[0]]){k=this[n[0]].apply(this,[k].concat(n.slice(2)))}',78,'k)},End',72,'k){',78,'b.end',415,352,'k)}))},Equation',72,'k,l',112,'l},ExtensionEnv',72,327,717,'l.name,k,"',804,'")},Array',72,'m,o,t,r,s,n,k,p){if(!r){r=this.GetArgument("\\\\begin{"+m.name+"}")}var u=("c"+r).replace(/[^clr|:]/g,"").replace(/[^|:]([|:])+/g,"$1");r=r.replace(/[^clr]/g,"").split("").join(" ");r=r.replace(/l/g,"left").replace(/r/g,"right").replace(/c/g,"center");var q',756,'arraydef:{columnalign:r,',758,'s||"1em"),rowspacing:(n||"4pt")}});if(u.match(/[|:]/)){var l=(u.charAt(0)+u.charAt(u.length-1)).replace(/[^|:]/g,"");if(l!==""){q',760,'frame={"|":"solid",":":"dashed"}[l.charAt(0)];q',760,'framespacing=".5em .5ex"}u=u.substr(1,u.length-2);q',760,'columnlines=u.split("").join(" ").replace(/[^|: ]/g,"none").replace(/\\|/g,"solid").replace(/:/g,"dashed")}if(o){q.open=','this.convertDelimiter(','o)}if(t){q.close=',849,'t)}if(k==="D"){q',760,338,'=c}if(k==="S"){q',760,340,'=1}if(p){q',760,'useHeight=f}',78,'m);',105,'q},convertDelimiter',72,'k){if(k){k=g.delimiter[k]}if(k==null',112,106,'if(k',124,'){k=k[0]}if(k.length===4){k=',272,'parseInt(k,16))}',105,'k},trimSpaces',72,'k){if(typeof(k)!="',67,105,'k}',105,'k','.replace(/^\\s','+|\\s+$/g,"")},nextIsSpace',80,105,84,').match(/[ \\n\\r\\t]/)},GetNext',80,'while','(this.nextIsSpace()){this.i++}',105,84,')},GetCS',80,62,210,'this.i).match(/^([a-z]+|.) ?/i);','if(k){this.i+=k[','1].length;',105,'k[1]}',95,'i++;return" "}},GetArgument',72,73,606,285,'()){case"":if(!m){',749,750,105,'null;case"}":if(!m','){d.Error("Extra close brace',' or missing open brace")}',105,'null;','case"\\\\":this.i++;','return"\\\\"+',117,'();case"{":','var k=++this.i,','n=1;',82,'){',606,84,'++)){',918,608,'"{":n','++;break;case"}":if(','n==0',914,'")}if(--n==0',112,210,'k,this.i-1)}break}}',749,'close brace");break}',105,84,'++)},GetBrackets',72,'l){if(',285,'()!="["){return""}',922,'m=0;',82,'){',606,84,'++)){case"{":m++;',608,'"\\\\":this.i',932,'m--<=0',914,' while looking for',' \']\'")}',608,'"]":if(m==0',112,210,'k,this.i-1)}break}}',192,'Couldn\'t find',' closing \']\' for',493,'l)},GetDelimiter',72,'k){while',891,126,84,');if(this.i<this.string',782,'this.i++;if(l=="\\\\"){l+=',117,'(k)}if(g.delimiter[l]!=null',112,849,'l)}}',749,'or unrecognized delimiter for "+k)},GetDimen',72,196,'m;if',891,'if(',84,')=="{"){m=',352,802,'(/^\\s*([-+]?(\\.\\','d+|\\d+(\\.\\d*)?))\\s*(pt|em|ex|mu|px|mm|cm|in|pc',')\\s*$/)){',105,'m.','replace(/ /g,"")}}',572,210,'this.i);',62,'m.match(/^\\s*(([-+]?(\\.\\',997,')) ?/);',899,'0].length;',105,'k[1].',1001,749,'dimension or its units for "+l)},GetUpTo',72,'n,o){while',891,121,'this.i,l,q,p=0;',82,'){l=this.i;q=',84,'++);',606,'q){case"\\\\":q+=',117,'();',608,'"{":p',932,'p==0',914,960,' "+o)}p--;break}if(p==0&&q==o',112,210,'m,l)}}',192,968,' "+o+" for "+n)},ParseArg',72,'k',112,472,352,'k),',163,').mml()},',686,72,'k,l',112,472,459,'k,l),',163,1049,700,72,'q,s){var p={',338,':f};if(s!=null){p.',340,'=s}if(',163,164,'p.',166,'=',163,169,'if(!q.match(/\\$|\\\\\\(/)){return[this.','InternalText','(q,p)]}var o=0,l=0,r,n="";var m=[];while(o<q',782,'r=q.charAt(o++);if(r','==="$"){if(n==="$"){','m.push(i.TeXAtom(d.Parse(q.slice(l,o-','1',')).mml().With(p)));n="";l=o','}',86,'l<o-1','){m.push(this.InternalText(q.slice(l',',o-1),p))}n="$";l=o}}',86,'r','==="\\\\"){',1077,'==="("&&n==""){if(l<o-2',1085,',o-2),p))}n=")";l=o}',86,'r===")"&&n===")"){',1079,'2',1081,'}}}}}if(n!==""){',192,'Math not terminated in text box")}if(l<q.length',1085,'),p))}',105,'m},',1074,72,327,'l=l',883,'+/,h).replace(/\\s+$/,h);',105,235,'l)).With(k)},',738,72,327,'var o="";var n="";var p;',121,'0;while(m<k',782,'p=k.charAt(m++);if(p',1089,'o+=p+k.charAt(m++)}',86,'p==="#"){',1122,'==="#"){o+=p}else{if(!p.match(/[1-9]/)||p>l',782,192,'Illegal ',303,'reference")}n=',741,741,'n,o),l[p-1]);o=""}}else{o+=p}}}',105,741,'n,o)},AddArgs',72,327,'if(k.match(/^[a-z]/i)&&l.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)){l+=" "}',105,'l+k}});d.Augment({Stack:e,Parse:a,Definitions:g,Startup:j,Translate',72,'k){var l,n=k.innerHTML',883,'+/,"").replace(/\\s+$/,"");if(',728,'Browser.isKonqueror){n=n.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}var o=(k.type.replace(/\\n/g," ").match(/(;|\\s|\\n)mode\\s*=\\s*display(;|\\s|\\n|$)/)!=null);n=d.','prefilterMath','(n,o,k);try{l=',472,'n).mml()}catch(m){if(!m.texError){throw m}l=this.formatError(m,n,o,k)}if(l.inferred){l=i.apply(MathJax.ElementJax,l.data)}else{l=i(l)}if(o){l.root.display="block"}',105,'l},',1151,72,'l,m,k',112,'l.replace(/([_^]\\s*\\d)(\\d)/g,"$1 $2")},formatError',72,'m,l,n,k',112,'i.merror(m.message.replace(/\\n.*/,""))},Error',72,'k){throw ',728,'Insert(Error(k),{texError:c})},Macro',72,720,119,']=["Macro"].concat([].slice.call(arguments,1))}});d.loadComplete("jax.js")})(MathJax.InputJax.TeX);']
+]);
- STACKITEM.start = STACKITEM.Subclass({
- type: "start", isOpen: TRUE,
- checkItem: function (item) {
- if (item.type === "stop") {return STACKITEM.mml(this.mmlData())}
- return this.SUPER(arguments).checkItem.call(this,item);
- }
- });
-
- STACKITEM.stop = STACKITEM.Subclass({
- type: "stop", isClose: TRUE
- });
-
- STACKITEM.open = STACKITEM.Subclass({
- type: "open", isOpen: TRUE,
- stopError: "Extra open brace or missing close brace",
- checkItem: function (item) {
- if (item.type === "close") {
- var mml = this.mmlData(); // this.mmlData(TRUE,TRUE); // force row
- return STACKITEM.mml(MML.TeXAtom(mml)); // TeXAtom make it an ORD to prevent spacing (FIXME: should be another way)
- }
- return this.SUPER(arguments).checkItem.call(this,item);
- }
- });
-
- STACKITEM.close = STACKITEM.Subclass({
- type: "close", isClose: TRUE
- });
-
- STACKITEM.subsup = STACKITEM.Subclass({
- type: "subsup",
- stopError: "Missing superscript or subscript argument",
- checkItem: function (item) {
- var script = ["","subscript","superscript"][this.position];
- if (item.type === "open" || item.type === "left") {return TRUE}
- if (item.type === "mml") {
- this.data[0].SetData(this.position,item.data[0]);
- return STACKITEM.mml(this.data[0]);
- }
- if (this.SUPER(arguments).checkItem.call(this,item))
- {TEX.Error("Missing open brace for "+script)}
- },
- Pop: function () {}
- });
-
- STACKITEM.over = STACKITEM.Subclass({
- type: "over", isClose: TRUE, name: "\\over",
- checkItem: function (item,stack) {
- if (item.type === "over") {TEX.Error("Ambiguous use of "+item.name)}
- if (item.isClose) {
- var mml = MML.mfrac(this.num,this.mmlData(FALSE));
- if (this.thickness != null) {mml.linethickness = this.thickness}
- if (this.open || this.close) {
- mml.texClass = MML.TEXCLASS.INNER;
- mml.texWithDelims = TRUE;
- mml = MML.mfenced(mml).With({open: this.open, close: this.close});
- }
- return [STACKITEM.mml(mml), item];
- }
- return this.SUPER(arguments).checkItem.call(this,item);
- },
- toString: function () {return "over["+this.num+" / "+this.data.join("; ")+"]"}
- });
-
- STACKITEM.left = STACKITEM.Subclass({
- type: "left", isOpen: TRUE, delim: '(',
- stopError: "Extra \\left or missing \\right",
- checkItem: function (item) {
- if (item.type === "right") {
- var mml = MML.mfenced(this.data.length === 1 ? this.data[0] : MML.mrow.apply(MML,this.data));
- return STACKITEM.mml(mml.With({open: this.delim, close: item.delim}));
- }
- return this.SUPER(arguments).checkItem.call(this,item);
- }
- });
-
- STACKITEM.right = STACKITEM.Subclass({
- type: "right", isClose: TRUE, delim: ')'
- });
-
- STACKITEM.begin = STACKITEM.Subclass({
- type: "begin", isOpen: TRUE,
- checkItem: function (item) {
- if (item.type === "end") {
- if (item.name !== this.name)
- {TEX.Error("\\begin{"+this.name+"} ended with \\end{"+item.name+"}")}
- if (!this.end) {return STACKITEM.mml(this.mmlData())}
- return this.parse[this.end].call(this.parse,this,this.data);
- }
- if (item.type === "stop") {TEX.Error("Missing \\end{"+this.name+"}")}
- return this.SUPER(arguments).checkItem.call(this,item);
- }
- });
-
- STACKITEM.end = STACKITEM.Subclass({
- type: "end", isClose: TRUE
- });
-
- STACKITEM.style = STACKITEM.Subclass({
- type: "style",
- checkItem: function (item) {
- if (!item.isClose) {return this.SUPER(arguments).checkItem.call(this,item)}
- var mml = MML.mstyle.apply(MML,this.data).With(this.styles);
- return [STACKITEM.mml(mml),item];
- }
- });
-
- STACKITEM.position = STACKITEM.Subclass({
- type: "position",
- checkItem: function (item) {
- if (item.isClose) {TEX.Error("Missing box for "+this.name)}
- if (item.isNotStack) {
- var mml = item.mmlData();
- switch (this.move) {
- case 'vertical':
- var mml = MML.mpadded(mml).With({height: this.dh, depth: this.dd, voffset: this.dh});
- return [STACKITEM.mml(mml)];
- case 'horizontal':
- return [STACKITEM.mml(this.left),item,STACKITEM.mml(this.right)];
- }
- }
- return this.SUPER(arguments).checkItem.call(this,item);
- }
- });
-
- STACKITEM.array = STACKITEM.Subclass({
- type: "array", isOpen: TRUE, arraydef: {},
- Init: function () {
- this.table = []; this.row = []; this.env = {};
- this.SUPER(arguments).Init.apply(this,arguments);
- },
- checkItem: function (item) {
- if (item.isClose) {
- if (item.isEntry) {this.EndEntry(); this.clearEnv(); return FALSE}
- if (item.isCR) {this.EndEntry(); this.EndRow(); this.clearEnv(); return FALSE}
- this.EndTable(); this.clearEnv();
- var mml = MML.mtable.apply(MML,this.table).With(this.arraydef);
- if (this.open || this.close) {
- mml = MML.mfenced(mml).With({open: this.open, close: this.close});
- }
- mml = STACKITEM.mml(mml);
- if (this.requireClose) {
- if (item.type === 'close') {return mml}
- TEX.Error("Missing close brace");
- }
- return [mml,item];
- }
- return this.SUPER(arguments).checkItem.call(this,item);
- },
- EndEntry: function () {this.row.push(MML.mtd.apply(MML,this.data)); this.data = []},
- EndRow: function () {this.table.push(MML.mtr.apply(MML,this.row)); this.row = []},
- EndTable: function () {
- if (this.data.length || this.row.length) {this.EndEntry(); this.EndRow()}
- },
- clearEnv: function () {
- for (var id in this.env) {if (this.env.hasOwnProperty(id)) {delete this.env[id]}}
- }
- });
-
- STACKITEM.cell = STACKITEM.Subclass({
- type: "cell", isClose: TRUE
- });
-
- STACKITEM.mml = STACKITEM.Subclass({
- type: "mml", isNotStack: TRUE,
- Push: function () {
- // embellished are type ORD in TeX (but not MML) so wrap them in TeXAtom
- for (var i = 0, m = arguments.length; i < m; i++) {
- if (arguments[i].type !== "mo" && arguments[i].isEmbellished())
- {arguments[i] = MML.TeXAtom(arguments[i]).With({isEmbellishedWrapper: TRUE})}
- }
- this.data.push.apply(this.data,arguments);
- },
- Add: function () {this.data.push.apply(this.data,arguments); return this}
- });
-
-
- var TEXDEF = TEX.Definitions = {};
-
- TEX.Startup = function () {
- MML = MathJax.ElementJax.mml;
- MathJax.Hub.Insert(TEXDEF,{
-
- // patterns for letters and numbers
- letter: /[a-z]/i,
- digit: /[0-9.]/,
- number: /^(?:[0-9]+(?:\{,\}[0-9]{3})*(?:\.[0-9]*)*|\.[0-9]+)/,
-
- special: {
- '\\': 'ControlSequence',
- '{': 'Open',
- '}': 'Close',
- '~': 'Tilde',
- '^': 'Superscript',
- '_': 'Subscript',
- ' ': 'Space',
- "\t": 'Space',
- "\r": 'Space',
- "\n": 'Space',
- "'": 'Prime',
- '%': 'Comment',
- '&': 'Entry',
- '#': 'Hash',
- '\u2019': 'Prime'
- },
-
- remap: {
- '-': '2212',
- '*': '2217'
- },
-
- mathchar0mi: {
- // Lower-case greek
- alpha: '03B1',
- beta: '03B2',
- gamma: '03B3',
- delta: '03B4',
- epsilon: '03F5',
- zeta: '03B6',
- eta: '03B7',
- theta: '03B8',
- iota: '03B9',
- kappa: '03BA',
- lambda: '03BB',
- mu: '03BC',
- nu: '03BD',
- xi: '03BE',
- omicron: '03BF', // added for completeness
- pi: '03C0',
- rho: '03C1',
- sigma: '03C3',
- tau: '03C4',
- upsilon: '03C5',
- phi: '03D5',
- chi: '03C7',
- psi: '03C8',
- omega: '03C9',
- varepsilon: '03B5',
- vartheta: '03D1',
- varpi: '03D6',
- varrho: '03F1',
- varsigma: '03C2',
- varphi: '03C6',
-
- // Ord symbols
- S: '00A7',
- aleph: ['2135',{mathvariant: MML.VARIANT.NORMAL}],
- hbar: '210F',
- imath: '0131',
- jmath: '0237',
- ell: '2113',
- wp: ['2118',{mathvariant: MML.VARIANT.NORMAL}],
- Re: ['211C',{mathvariant: MML.VARIANT.NORMAL}],
- Im: ['2111',{mathvariant: MML.VARIANT.NORMAL}],
- partial: ['2202',{mathvariant: MML.VARIANT.NORMAL}],
- infty: ['221E',{mathvariant: MML.VARIANT.NORMAL}],
- prime: ['2032',{mathvariant: MML.VARIANT.NORMAL}],
- emptyset: ['2205',{mathvariant: MML.VARIANT.NORMAL}],
- nabla: ['2207',{mathvariant: MML.VARIANT.NORMAL}],
- top: ['22A4',{mathvariant: MML.VARIANT.NORMAL}],
- bot: ['22A5',{mathvariant: MML.VARIANT.NORMAL}],
- angle: ['2220',{mathvariant: MML.VARIANT.NORMAL}],
- triangle: ['25B3',{mathvariant: MML.VARIANT.NORMAL}],
- backslash: ['2216',{mathvariant: MML.VARIANT.NORMAL}],
- forall: ['2200',{mathvariant: MML.VARIANT.NORMAL}],
- exists: ['2203',{mathvariant: MML.VARIANT.NORMAL}],
- neg: ['00AC',{mathvariant: MML.VARIANT.NORMAL}],
- lnot: ['00AC',{mathvariant: MML.VARIANT.NORMAL}],
- flat: ['266D',{mathvariant: MML.VARIANT.NORMAL}],
- natural: ['266E',{mathvariant: MML.VARIANT.NORMAL}],
- sharp: ['266F',{mathvariant: MML.VARIANT.NORMAL}],
- clubsuit: ['2663',{mathvariant: MML.VARIANT.NORMAL}],
- diamondsuit: ['2662',{mathvariant: MML.VARIANT.NORMAL}],
- heartsuit: ['2661',{mathvariant: MML.VARIANT.NORMAL}],
- spadesuit: ['2660',{mathvariant: MML.VARIANT.NORMAL}]
- },
-
- mathchar0mo: {
- surd: '221A',
-
- // big ops
- coprod: ['2210',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigvee: ['22C1',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigwedge: ['22C0',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- biguplus: ['2A04',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigcap: ['22C2',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigcup: ['22C3',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- 'int': ['222B',{texClass: MML.TEXCLASS.OP}],
- intop: ['222B',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE, movablelimits:TRUE}],
- iint: ['222C',{texClass: MML.TEXCLASS.OP}],
- iiint: ['222D',{texClass: MML.TEXCLASS.OP}],
- prod: ['220F',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- sum: ['2211',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigotimes: ['2A02',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigoplus: ['2A01',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- bigodot: ['2A00',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- oint: ['222E',{texClass: MML.TEXCLASS.OP}],
- bigsqcup: ['2A06',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}],
- smallint: ['222B',{largeop:FALSE}],
-
- // binary operations
- triangleleft: '25C3',
- triangleright: '25B9',
- bigtriangleup: '25B3',
- bigtriangledown: '25BD',
- wedge: '2227',
- land: '2227',
- vee: '2228',
- lor: '2228',
- cap: '2229',
- cup: '222A',
- ddagger: '2021',
- dagger: '2020',
- sqcap: '2293',
- sqcup: '2294',
- uplus: '228E',
- amalg: '2A3F',
- diamond: '22C4',
- bullet: '2219',
- wr: '2240',
- div: '00F7',
- odot: ['2299',{largeop: FALSE}],
- oslash: ['2298',{largeop: FALSE}],
- otimes: ['2297',{largeop: FALSE}],
- ominus: ['2296',{largeop: FALSE}],
- oplus: ['2295',{largeop: FALSE}],
- mp: '2213',
- pm: '00B1',
- circ: '2218',
- bigcirc: '25EF',
- setminus: '2216',
- cdot: '22C5',
- ast: '2217',
- times: '00D7',
- star: '22C6',
-
- // Relations
- propto: '221D',
- sqsubseteq: '2291',
- sqsupseteq: '2292',
- parallel: '2225',
- mid: '2223',
- dashv: '22A3',
- vdash: '22A2',
- leq: '2264',
- le: '2264',
- geq: '2265',
- ge: '2265',
- lt: '003C',
- gt: '003E',
- succ: '227B',
- prec: '227A',
- approx: '2248',
- succeq: '2AB0', // or '227C',
- preceq: '2AAF', // or '227D',
- supset: '2283',
- subset: '2282',
- supseteq: '2287',
- subseteq: '2286',
- 'in': '2208',
- ni: '220B',
- notin: '2209',
- owns: '220B',
- gg: '226B',
- ll: '226A',
- sim: '223C',
- simeq: '2243',
- perp: '22A5',
- equiv: '2261',
- asymp: '224D',
- smile: '2323',
- frown: '2322',
- ne: '2260',
- neq: '2260',
- cong: '2245',
- doteq: '2250',
- bowtie: '22C8',
- models: '22A8',
-
- notChar: '0338',
-
-
- // Arrows
- Leftrightarrow: '21D4',
- Leftarrow: '21D0',
- Rightarrow: '21D2',
- leftrightarrow: '2194',
- leftarrow: '2190',
- gets: '2190',
- rightarrow: '2192',
- to: '2192',
- mapsto: '21A6',
- leftharpoonup: '21BC',
- leftharpoondown: '21BD',
- rightharpoonup: '21C0',
- rightharpoondown: '21C1',
- nearrow: '2197',
- searrow: '2198',
- nwarrow: '2196',
- swarrow: '2199',
- rightleftharpoons: '21CC',
- hookrightarrow: '21AA',
- hookleftarrow: '21A9',
- longleftarrow: '27F5',
- Longleftarrow: '27F8',
- longrightarrow: '27F6',
- Longrightarrow: '27F9',
- Longleftrightarrow: '27FA',
- longleftrightarrow: '27F7',
- longmapsto: '27FC',
-
-
- // Misc.
- ldots: '2026',
- cdots: '22EF',
- vdots: '22EE',
- ddots: '22F1',
- dots: '2026', // should be more complex than this
- dotsc: '2026', // dots with commas
- dotsb: '22EF', // dots with binary ops and relations
- dotsm: '22EF', // dots with multiplication
- dotsi: '22EF', // dots with integrals
- dotso: '2026', // other dots
-
- ldotp: ['002E', {texClass: MML.TEXCLASS.PUNCT}],
- cdotp: ['22C5', {texClass: MML.TEXCLASS.PUNCT}],
- colon: ['003A', {texClass: MML.TEXCLASS.PUNCT}]
- },
-
- mathchar7: {
- Gamma: '0393',
- Delta: '0394',
- Theta: '0398',
- Lambda: '039B',
- Xi: '039E',
- Pi: '03A0',
- Sigma: '03A3',
- Upsilon: '03A5',
- Phi: '03A6',
- Psi: '03A8',
- Omega: '03A9',
-
- '_': '005F',
- '#': '0023',
- '$': '0024',
- '%': '0025',
- '&': '0026',
- And: '0026'
- },
-
- delimiter: {
- '(': '(',
- ')': ')',
- '[': '[',
- ']': ']',
- '<': '27E8',
- '>': '27E9',
- '\\lt': '27E8',
- '\\gt': '27E9',
- '/': '/',
- '|': ['|',{texClass:MML.TEXCLASS.ORD}],
- '.': '',
- '\\\\': '\\',
- '\\lmoustache': '23B0', // non-standard
- '\\rmoustache': '23B1', // non-standard
- '\\lgroup': '27EE', // non-standard
- '\\rgroup': '27EF', // non-standard
- '\\arrowvert': '23D0',
- '\\Arrowvert': '2016',
- '\\bracevert': '23AA', // non-standard
- '\\Vert': ['2225',{texClass:MML.TEXCLASS.ORD}],
- '\\|': ['2225',{texClass:MML.TEXCLASS.ORD}],
- '\\vert': ['|',{texClass:MML.TEXCLASS.ORD}],
- '\\uparrow': '2191',
- '\\downarrow': '2193',
- '\\updownarrow': '2195',
- '\\Uparrow': '21D1',
- '\\Downarrow': '21D3',
- '\\Updownarrow': '21D5',
- '\\backslash': '\\',
- '\\rangle': '27E9',
- '\\langle': '27E8',
- '\\rbrace': '}',
- '\\lbrace': '{',
- '\\}': '}',
- '\\{': '{',
- '\\rceil': '2309',
- '\\lceil': '2308',
- '\\rfloor': '230B',
- '\\lfloor': '230A',
- '\\lbrack': '[',
- '\\rbrack': ']'
- },
-
- macros: {
- displaystyle: ['SetStyle','D',TRUE,0],
- textstyle: ['SetStyle','T',FALSE,0],
- scriptstyle: ['SetStyle','S',FALSE,1],
- scriptscriptstyle: ['SetStyle','SS',FALSE,2],
-
- rm: ['SetFont',MML.VARIANT.NORMAL],
- mit: ['SetFont',MML.VARIANT.ITALIC],
- oldstyle: ['SetFont',MML.VARIANT.OLDSTYLE],
- cal: ['SetFont',MML.VARIANT.CALIGRAPHIC],
- it: ['SetFont',MML.VARIANT.ITALIC], // may need special handling
- bf: ['SetFont',MML.VARIANT.BOLD],
- bbFont: ['SetFont',MML.VARIANT.DOUBLESTRUCK],
- scr: ['SetFont',MML.VARIANT.SCRIPT],
- frak: ['SetFont',MML.VARIANT.FRAKTUR],
- sf: ['SetFont',MML.VARIANT.SANSSERIF],
- tt: ['SetFont',MML.VARIANT.MONOSPACE],
-
-// font:
-
- tiny: ['SetSize',0.5],
- Tiny: ['SetSize',0.6], // non-standard
- scriptsize: ['SetSize',0.7],
- small: ['SetSize',0.85],
- normalsize: ['SetSize',1.0],
- large: ['SetSize',1.2],
- Large: ['SetSize',1.44],
- LARGE: ['SetSize',1.73],
- huge: ['SetSize',2.07],
- Huge: ['SetSize',2.49],
-
- arcsin: ['NamedOp',0],
- arccos: ['NamedOp',0],
- arctan: ['NamedOp',0],
- arg: ['NamedOp',0],
- cos: ['NamedOp',0],
- cosh: ['NamedOp',0],
- cot: ['NamedOp',0],
- coth: ['NamedOp',0],
- csc: ['NamedOp',0],
- deg: ['NamedOp',0],
- det: 'NamedOp',
- dim: ['NamedOp',0],
- exp: ['NamedOp',0],
- gcd: 'NamedOp',
- hom: ['NamedOp',0],
- inf: 'NamedOp',
- ker: ['NamedOp',0],
- lg: ['NamedOp',0],
- lim: 'NamedOp',
- liminf: ['NamedOp',null,'lim inf'],
- limsup: ['NamedOp',null,'lim sup'],
- ln: ['NamedOp',0],
- log: ['NamedOp',0],
- max: 'NamedOp',
- min: 'NamedOp',
- Pr: 'NamedOp',
- sec: ['NamedOp',0],
- sin: ['NamedOp',0],
- sinh: ['NamedOp',0],
- sup: 'NamedOp',
- tan: ['NamedOp',0],
- tanh: ['NamedOp',0],
-
- limits: ['Limits',1],
- nolimits: ['Limits',0],
-
- overline: ['UnderOver','203E'],
- underline: ['UnderOver','005F'],
- overbrace: ['UnderOver','23DE',1],
- underbrace: ['UnderOver','23DF',1],
- overrightarrow: ['UnderOver','2192'],
- underrightarrow: ['UnderOver','2192'],
- overleftarrow: ['UnderOver','2190'],
- underleftarrow: ['UnderOver','2190'],
- overleftrightarrow: ['UnderOver','2194'],
- underleftrightarrow: ['UnderOver','2194'],
-
- overset: 'Overset',
- underset: 'Underset',
- stackrel: ['Macro','\\mathrel{\\mathop{#2}\\limits^{#1}}',2],
-
- over: 'Over',
- overwithdelims: 'Over',
- atop: 'Over',
- atopwithdelims: 'Over',
- above: 'Over',
- abovewithdelims: 'Over',
- brace: ['Over','{','}'],
- brack: ['Over','[',']'],
- choose: ['Over','(',')'],
-
- frac: 'Frac',
- sqrt: 'Sqrt',
- root: 'Root',
- uproot: ['MoveRoot','upRoot'],
- leftroot: ['MoveRoot','leftRoot'],
-
- left: 'LeftRight',
- right: 'LeftRight',
-
- llap: 'Lap',
- rlap: 'Lap',
- raise: 'RaiseLower',
- lower: 'RaiseLower',
- moveleft: 'MoveLeftRight',
- moveright: 'MoveLeftRight',
-
- ',': ['Spacer',MML.LENGTH.THINMATHSPACE],
- ':': ['Spacer',MML.LENGTH.THINMATHSPACE], // for LaTeX
- '>': ['Spacer',MML.LENGTH.MEDIUMMATHSPACE],
- ';': ['Spacer',MML.LENGTH.THICKMATHSPACE],
- '!': ['Spacer',MML.LENGTH.NEGATIVETHINMATHSPACE],
- enspace: ['Spacer',".5em"],
- quad: ['Spacer',"1em"],
- qquad: ['Spacer',"2em"],
- thinspace: ['Spacer',MML.LENGTH.THINMATHSPACE],
- negthinspace: ['Spacer',MML.LENGTH.NEGATIVETHINMATHSPACE],
-
- hskip: 'Hskip',
- hspace: 'Hskip',
- kern: 'Hskip',
- mskip: 'Hskip',
- mspace: 'Hskip',
- mkern: 'Hskip',
- Rule: ['Rule'],
- Space: ['Rule','blank'],
-
- big: ['MakeBig',MML.TEXCLASS.ORD,0.85],
- Big: ['MakeBig',MML.TEXCLASS.ORD,1.15],
- bigg: ['MakeBig',MML.TEXCLASS.ORD,1.45],
- Bigg: ['MakeBig',MML.TEXCLASS.ORD,1.75],
- bigl: ['MakeBig',MML.TEXCLASS.OPEN,0.85],
- Bigl: ['MakeBig',MML.TEXCLASS.OPEN,1.15],
- biggl: ['MakeBig',MML.TEXCLASS.OPEN,1.45],
- Biggl: ['MakeBig',MML.TEXCLASS.OPEN,1.75],
- bigr: ['MakeBig',MML.TEXCLASS.CLOSE,0.85],
- Bigr: ['MakeBig',MML.TEXCLASS.CLOSE,1.15],
- biggr: ['MakeBig',MML.TEXCLASS.CLOSE,1.45],
- Biggr: ['MakeBig',MML.TEXCLASS.CLOSE,1.75],
- bigm: ['MakeBig',MML.TEXCLASS.REL,0.85],
- Bigm: ['MakeBig',MML.TEXCLASS.REL,1.15],
- biggm: ['MakeBig',MML.TEXCLASS.REL,1.45],
- Biggm: ['MakeBig',MML.TEXCLASS.REL,1.75],
-
- mathord: ['TeXAtom',MML.TEXCLASS.ORD],
- mathop: ['TeXAtom',MML.TEXCLASS.OP],
- mathopen: ['TeXAtom',MML.TEXCLASS.OPEN],
- mathclose: ['TeXAtom',MML.TEXCLASS.CLOSE],
- mathbin: ['TeXAtom',MML.TEXCLASS.BIN],
- mathrel: ['TeXAtom',MML.TEXCLASS.REL],
- mathpunct: ['TeXAtom',MML.TEXCLASS.PUNCT],
- mathinner: ['TeXAtom',MML.TEXCLASS.INNER],
-
- vcenter: ['TeXAtom',MML.TEXCLASS.VCENTER],
-
- mathchoice: ['Extension','mathchoice'],
- buildrel: 'BuildRel',
-
- hbox: ['HBox',0],
- text: 'HBox',
- mbox: ['HBox',0],
- fbox: 'FBox',
-
- strut: 'Strut',
- mathstrut: ['Macro','\\vphantom{(}'],
- phantom: 'Phantom',
- vphantom: ['Phantom',1,0],
- hphantom: ['Phantom',0,1],
- smash: 'Smash',
-
- acute: ['Accent', "02CA"], // or 0301
- grave: ['Accent', "02CB"], // or 0300
- ddot: ['Accent', "00A8"], // or 0308
- tilde: ['Accent', "02DC"], // or 0303
- bar: ['Accent', "02C9"], // or 0304
- breve: ['Accent', "02D8"], // or 0306
- check: ['Accent', "02C7"], // or 030C
- hat: ['Accent', "02C6"], // or 0302
- vec: ['Accent', "20D7"],
- dot: ['Accent', "02D9"], // or 0307
- widetilde: ['Accent', "02DC",1], // or 0303
- widehat: ['Accent', "02C6",1], // or 0302
-
- matrix: 'Matrix',
- array: 'Matrix',
- pmatrix: ['Matrix','(',')'],
- cases: ['Matrix','{','',"left left",null,".1em"],
- eqalign: ['Matrix',null,null,"right left",MML.LENGTH.THICKMATHSPACE,".5em",'D'],
- displaylines: ['Matrix',null,null,"center",null,".5em",'D'],
- cr: 'Cr',
- '\\': 'Cr',
- newline: 'Cr',
-// noalign: 'HandleNoAlign',
- eqalignno: ['Matrix',null,null,"right left right",MML.LENGTH.THICKMATHSPACE+" 3em",".5em",'D'],
- leqalignno: ['Matrix',null,null,"right left right",MML.LENGTH.THICKMATHSPACE+" 3em",".5em",'D'],
-
- // TeX substitution macros
- bmod: ['Macro','\\mathbin{\\rm mod}'],
- pmod: ['Macro','\\pod{{\\rm mod}\\kern 6mu #1}',1],
- mod: ['Macro','\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}{\\rm mod}\\,\\,#1',1],
- pod: ['Macro','\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)',1],
- iff: ['Macro','\\;\\Longleftrightarrow\\;'],
- skew: ['Macro','{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}',3],
- mathcal: ['Macro','{\\cal #1}',1],
- mathscr: ['Macro','{\\scr #1}',1],
- mathrm: ['Macro','{\\rm #1}',1],
- mathbf: ['Macro','{\\bf #1}',1],
- mathbb: ['Macro','{\\bbFont #1}',1],
- Bbb: ['Macro','{\\bbFont #1}',1],
- mathit: ['Macro','{\\it #1}',1],
- mathfrak: ['Macro','{\\frak #1}',1],
- mathsf: ['Macro','{\\sf #1}',1],
- mathtt: ['Macro','{\\tt #1}',1],
- textrm: ['Macro','\\mathord{\\rm\\text{#1}}',1],
- textit: ['Macro','\\mathord{\\it{\\text{#1}}}',1],
- textbf: ['Macro','\\mathord{\\bf{\\text{#1}}}',1],
- pmb: ['Macro','\\rlap{#1}\\kern1px{#1}',1],
- TeX: ['Macro','T\\kern-.14em\\lower.5ex{E}\\kern-.115em X'],
- LaTeX: ['Macro','L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX'],
- not: ['Macro','\\mathrel{\\rlap{\\kern.5em\\notChar}}'],
- ' ': ['Macro','\\text{ }'],
- space: 'Tilde',
-
-
- // LaTeX
- begin: 'Begin',
- end: 'End',
-
- newcommand: ['Extension','newcommand'],
- newenvironment: ['Extension','newcommand'],
- def: ['Extension','newcommand'],
-
- verb: ['Extension','verb'],
-
- boldsymbol: ['Extension','boldsymbol'],
-
- tag: ['Extension','AMSmath'],
- notag: ['Extension','AMSmath'],
- label: ['Macro','',1], // not implemented yet
- nonumber: ['Macro',''], // not implemented yet
-
- // Extensions to TeX
- unicode: ['Extension','unicode'],
- color: 'Color',
-
-// href: ['Extension','HTML'],
-// 'class': ['Extension','HTML'],
-// style: ['Extension','HTML'],
-// cssId: ['Extension','HTML'],
-// bbox: ['Extension','bbox'],
-
- require: 'Require'
-
- },
-
- environment: {
- array: ['Array'],
- matrix: ['Array',null,null,null,'c'],
- pmatrix: ['Array',null,'(',')','c'],
- bmatrix: ['Array',null,'[',']','c'],
- Bmatrix: ['Array',null,'\\{','\\}','c'],
- vmatrix: ['Array',null,'\\vert','\\vert','c'],
- Vmatrix: ['Array',null,'\\Vert','\\Vert','c'],
- cases: ['Array',null,'\\{','.','ll',null,".1em"],
- eqnarray: ['Array',null,null,null,'rcl',MML.LENGTH.THICKMATHSPACE,".5em",'D'],
- 'eqnarray*': ['Array',null,null,null,'rcl',MML.LENGTH.THICKMATHSPACE,".5em",'D'],
-
- equation: [null,'Equation'],
- 'equation*': [null,'Equation'],
-
- align: ['ExtensionEnv',null,'AMSmath'],
- 'align*': ['ExtensionEnv',null,'AMSmath'],
- aligned: ['ExtensionEnv',null,'AMSmath'],
- multline: ['ExtensionEnv',null,'AMSmath'],
- 'multline*': ['ExtensionEnv',null,'AMSmath'],
- split: ['ExtensionEnv',null,'AMSmath'],
- gather: ['ExtensionEnv',null,'AMSmath'],
- 'gather*': ['ExtensionEnv',null,'AMSmath'],
- gathered: ['ExtensionEnv',null,'AMSmath'],
- alignat: ['ExtensionEnv',null,'AMSmath'],
- 'alignat*': ['ExtensionEnv',null,'AMSmath'],
- alignedat: ['ExtensionEnv',null,'AMSmath']
- },
-
- p_height: 1.2 / .85 // cmex10 height plus depth over .85
-
- });
- };
-
- /************************************************************************/
- /*
- * The TeX Parser
- */
-
- TEX.Parse = MathJax.Object.Subclass({
- Init: function (string,env) {
- this.string = string; this.i = 0;
- var ENV; if (env) {ENV = {}; for (var id in env) {if (env.hasOwnProperty(id)) {ENV[id] = env[id]}}}
- this.stack = TEX.Stack(ENV);
- this.Parse();
- this.Push(STACKITEM.stop());
- },
- Parse: function () {
- var c;
- while (this.i < this.string.length) {
- c = this.string.charAt(this.i++);
- if (TEXDEF.special[c]) {this[TEXDEF.special[c]](c)}
- else if (TEXDEF.letter.test(c)) {this.Variable(c)}
- else if (TEXDEF.digit.test(c)) {this.Number(c)}
- else {this.Other(c)}
- }
- },
- Push: function () {this.stack.Push.apply(this.stack,arguments)},
- mml: function () {
- if (this.stack.Top().type !== "mml") {return null}
- return this.stack.Top().data[0];
- },
- mmlToken: function (token) {return token}, // used by boldsymbol extension
-
- /************************************************************************/
- /*
- * Handle various token classes
- */
-
- /*
- * Lookup a control-sequence and process it
- */
- ControlSequence: function (c) {
- var name = this.GetCS();
- if (TEXDEF.macros[name]) { // javascript macro
- var macro = TEXDEF.macros[name];
- if (!(macro instanceof Array)) {macro = [macro]}
- var fn = macro[0]; if (!(fn instanceof Function)) {fn = this[fn]}
- fn.apply(this,["\\"+name].concat(macro.slice(1)));
- } else if (TEXDEF.mathchar0mi[name]) { // normal mathchar (mi)
- var mchar = TEXDEF.mathchar0mi[name]; var def = {mathvariant: MML.VARIANT.ITALIC};
- if (mchar instanceof Array) {def = mchar[1]; mchar = mchar[0]}
- this.Push(this.mmlToken(MML.mi(MML.entity("#x"+mchar)).With(def)));
- } else if (TEXDEF.mathchar0mo[name]) { // normal mathchar (mo)
- var mchar = TEXDEF.mathchar0mo[name]; var def = {stretchy: FALSE};
- if (mchar instanceof Array) {def = mchar[1]; def.stretchy = FALSE; mchar = mchar[0]}
- this.Push(this.mmlToken(MML.mo(MML.entity("#x"+mchar)).With(def)));
- } else if (TEXDEF.mathchar7[name]) { // mathchar in current family
- var mchar = TEXDEF.mathchar7[name]; var def = {mathvariant: MML.VARIANT.NORMAL};
- if (mchar instanceof Array) {def = mchar[1]; mchar = mchar[0]}
- if (this.stack.env.font) {def.mathvariant = this.stack.env.font}
- this.Push(this.mmlToken(MML.mi(MML.entity("#x"+mchar)).With(def)));
- } else if (TEXDEF.delimiter["\\"+name] != null) { // delimiter
- var delim = TEXDEF.delimiter["\\"+name], def = {};
- if (delim instanceof Array) {def = delim[1]; delim = delim[0]}
- if (delim.length === 4) {delim = MML.entity('#x'+delim)} else {delim = MML.chars(delim)}
- this.Push(this.mmlToken(MML.mo(delim).With({fence: FALSE, stretchy: FALSE}).With(def)));
- } else { // error
- TEX.Error("Undefined control sequence \\"+name);
- }
- },
-
- /*
- * Handle a variable (a single letter)
- */
- Variable: function (c) {
- var def = {}; if (this.stack.env.font) {def.mathvariant = this.stack.env.font}
- this.Push(this.mmlToken(MML.mi(MML.chars(c)).With(def)));
- },
-
- /*
- * Determine the extent of a number (pattern may need work)
- */
- Number: function (c) {
- var mml, n = this.string.slice(this.i-1).match(TEXDEF.number);
- if (n) {mml = MML.mn(n[0].replace(/[{}]/g,"")); this.i += n[0].length - 1}
- else {mml = MML.mo(MML.chars(c))}
- if (this.stack.env.font) {mml.mathvariant = this.stack.env.font}
- this.Push(this.mmlToken(mml));
- },
-
- /*
- * Handle { and }
- */
- Open: function (c) {this.Push(STACKITEM.open())},
- Close: function (c) {this.Push(STACKITEM.close())},
-
- /*
- * Handle tilde and spaces
- */
- Tilde: function (c) {this.Push(MML.mtext(MML.chars(" ")))},
- Space: function (c) {},
-
- /*
- * Handle ^, _, and '
- */
- Superscript: function (c) {
- var position, base = this.stack.Prev(); if (!base) {base = MML.mi("")}
- if (base.isEmbellishedWrapper) {base = base.data[0].data[0]}
- if (base.type === "msubsup") {
- if (base.data[base.sup]) {
- if (!base.data[base.sup].isPrime) {TEX.Error("Double exponent: use braces to clarify")}
- base = MML.msubsup(base,null,null);
- }
- position = base.sup;
- } else if (base.movesupsub) {
- if (base.type !== "munderover" || base.data[base.over])
- {base = MML.munderover(base,null,null).With({movesupsub:TRUE})}
- position = base.over;
- } else {
- base = MML.msubsup(base,null,null);
- position = base.sup;
- }
- this.Push(STACKITEM.subsup(base).With({position: position}));
- },
- Subscript: function (c) {
- var position, base = this.stack.Prev(); if (!base) {base = MML.mi("")}
- if (base.isEmbellishedWrapper) {base = base.data[0].data[0]}
- if (base.type === "msubsup") {
- if (base.data[base.sub]) {TEX.Error("Double subscripts: use braces to clarify")}
- position = base.sub;
- } else if (base.movesupsub) {
- if (base.type !== "munderover" || base.data[base.under])
- {base = MML.munderover(base,null,null).With({movesupsub:TRUE})}
- position = base.under;
- } else {
- base = MML.msubsup(base,null,null);
- position = base.sub;
- }
- this.Push(STACKITEM.subsup(base).With({position: position}));
- },
- PRIME: String.fromCharCode(0x2032), SMARTQUOTE: String.fromCharCode(0x2019),
- Prime: function (c) {
- var base = this.stack.Prev(); if (!base) {base = MML.mi()}
- if (base.type === "msubsup" && base.data[base.sup])
- {TEX.Error("Prime causes double exponent: use braces to clarify")}
- var sup = ""; this.i--;
- do {sup += this.PRIME; this.i++, c = this.GetNext()}
- while (c === "'" || c === this.SMARTQUOTE);
- sup = this.mmlToken(MML.mo(MML.chars(sup)).With({isPrime: TRUE, variantForm: TEX.isSTIX}));
- this.Push(MML.msubsup(base,null,sup));
- },
-
- /*
- * Handle comments
- */
- Comment: function (c) {
- while (this.i < this.string.length && this.string.charAt(this.i) != "\n") {this.i++}
- },
-
- /*
- * Handle hash marks outside of definitions
- */
- Hash: function (c) {
- TEX.Error("You can't use 'macro parameter character #' in math mode");
- },
-
- /*
- * Handle other characters (as <mo> elements)
- */
- Other: function (c) {
- var def = {stretchy: false}, mo;
- if (this.stack.env.font) {def.mathvariant = this.stack.env.font}
- if (TEXDEF.remap[c]) {
- c = TEXDEF.remap[c];
- if (c instanceof Array) {def = c[1]; c = c[0]}
- mo = MML.mo(MML.entity('#x'+c));
- } else {
- mo = MML.mo(c);
- }
- if (mo.autoDefault("texClass",true) == "") {mo = MML.TeXAtom(mo)}
- this.Push(this.mmlToken(mo.With(def)));
- },
-
- /************************************************************************/
- /*
- * Macros
- */
-
- SetFont: function (name,font) {this.stack.env.font = font},
- SetStyle: function (name,texStyle,style,level) {
- this.stack.env.style = texStyle; this.stack.env.level = level;
- this.Push(STACKITEM.style().With({styles: {displaystyle: style, scriptlevel: level}}));
- },
- SetSize: function (name,size) {
- this.stack.env.size = size;
- this.Push(STACKITEM.style().With({styles: {mathsize: size+"em"}})); // convert to absolute?
- },
-
- Color: function (name) {
- var color = this.GetArgument(name);
- var old = this.stack.env.color; this.stack.env.color = color;
- var math = this.ParseArg(name);
- if (old) {this.stack.env.color} else {delete this.stack.env.color}
- this.Push(MML.mstyle(math).With({mathcolor: color}));
- },
-
- Spacer: function (name,space) {
- this.Push(MML.mspace().With({width: space, mathsize: MML.SIZE.NORMAL, scriptlevel:1}));
- },
-
- LeftRight: function (name) {
- this.Push(STACKITEM[name.substr(1)]().With({delim: this.GetDelimiter(name)}));
- },
-
- NamedOp: function (name,limits,id) {
- var underover = (limits != null && limits === 0 ? FALSE : TRUE);
- if (!id) {id = name.substr(1)}; limits = ((limits || limits == null) ? TRUE : FALSE);
- id = id.replace(/ /,String.fromCharCode(0x2006));
- var mml = MML.mo(id).With({
- movablelimits: limits,
- movesupsub: underover,
- form: MML.FORM.PREFIX,
- texClass: MML.TEXCLASS.OP
- });
- mml.useMMLspacing &= ~mml.SPACE_ATTR.form; // don't count this explicit form setting
- this.Push(this.mmlToken(mml));
- },
- Limits: function (name,limits) {
- var op = this.stack.Prev("nopop");
- if (op.texClass !== MML.TEXCLASS.OP) {TEX.Error(name+" is allowed only on operators")}
- op.movesupsub = (limits ? TRUE : FALSE);
- op.movablelimits = FALSE;
- },
-
- Over: function (name,open,close) {
- var mml = STACKITEM.over().With({name: name});
- if (open || close) {
- mml.open = open; mml.close = close;
- } else if (name.match(/withdelims$/)) {
- mml.open = this.GetDelimiter(name);
- mml.close = this.GetDelimiter(name);
- }
- if (name.match(/^\\above/)) {mml.thickness = this.GetDimen(name)}
- else if (name.match(/^\\atop/) || open || close) {mml.thickness = 0}
- this.Push(mml);
- },
-
- Frac: function (name) {
- var num = this.ParseArg(name);
- var den = this.ParseArg(name);
- this.Push(MML.mfrac(num,den));
- },
-
- Sqrt: function (name) {
- var n = this.GetBrackets(name), mml = this.ParseArg(name);
- if (n == "") {mml = MML.msqrt.apply(MML,mml.array())}
- else {mml = MML.mroot(mml,this.parseRoot(n))}
- this.Push(mml);
- },
- Root: function (name) {
- var n = this.GetUpTo(name,"\\of");
- var arg = this.ParseArg(name);
- this.Push(MML.mroot(arg,this.parseRoot(n)));
- },
- parseRoot: function (n) {
- var env = this.stack.env, inRoot = env.inRoot; env.inRoot = true;
- var parser = TEX.Parse(n,env); n = parser.mml(); var global = parser.stack.global;
- if (global.leftRoot || global.upRoot) {
- n = MML.mpadded(n);
- if (global.leftRoot) {n.width = global.leftRoot}
- if (global.upRoot) {n.voffset = global.upRoot; n.height = global.upRoot}
- }
- env.inRoot = inRoot;
- return n;
- },
- MoveRoot: function (name,id) {
- if (!this.stack.env.inRoot) TEX.Error(name+" can appear only within a root");
- if (this.stack.global[id]) TEX.Error("Multiple use of "+name);
- var n = this.GetArgument(name);
- if (!n.match(/-?[0-9]+/)) TEX.Error("The argument to "+name+" must be an integer");
- n = (n/15)+"em";
- if (n.substr(0,1) !== "-") {n = "+"+n}
- this.stack.global[id] = n;
- },
-
- Accent: function (name,accent,stretchy) {
- var c = this.ParseArg(name);
- var mml = this.mmlToken(MML.mo(MML.entity("#x"+accent)).With({accent: TRUE}));
- mml.stretchy = (stretchy ? TRUE : FALSE);
- this.Push(MML.munderover(c,null,mml).With({accent: TRUE}));
- },
-
- UnderOver: function (name,c,stack) {
- var pos = {o: "over", u: "under"}[name.charAt(1)];
- var base = this.ParseArg(name);
- var mml = MML.munderover(base,null,null);
- if (stack) {mml.movesupsub = TRUE}
- mml.data[mml[pos]] =
- this.mmlToken(MML.mo(MML.entity("#x"+c)).With({stretchy: TRUE, accent: (pos == "under")}));
- this.Push(mml);
- },
-
- Overset: function (name) {
- var top = this.ParseArg(name), base = this.ParseArg(name);
- this.Push(MML.munderover(base,null,top));
- },
- Underset: function (name) {
- var bot = this.ParseArg(name), base = this.ParseArg(name);
- this.Push(MML.munderover(base,bot,null));
- },
-
- TeXAtom: function (name,mclass) {
- var def = {texClass: mclass};
- if (mclass == MML.TEXCLASS.OP) {def.movesupsub = def.movablelimits = TRUE}
- this.Push(MML.TeXAtom(this.ParseArg(name)).With(def));
- },
-
- Strut: function (name) {
- this.Push(MML.mpadded().With({height: "8.6pt", depth: "3pt", width: 0}));
- },
-
- Phantom: function (name,v,h) {
- var box = MML.mphantom(this.ParseArg(name));
- if (v || h) {
- box = MML.mpadded(box);
- if (h) {box.height = box.depth = 0}
- if (v) {box.width = 0}
- }
- this.Push(box);
- },
-
- Smash: function (name) {
- var bt = this.trimSpaces(this.GetBrackets(name));
- var smash = MML.mpadded(this.ParseArg(name));
- switch (bt) {
- case "b": smash.depth = 0; break;
- case "t": smash.height = 0; break;
- default: smash.height = smash.depth = 0;
- }
- this.Push(smash);
- },
-
- Lap: function (name) {
- var mml = MML.mpadded(this.ParseArg(name)).With({width: 0});
- if (name === "\\llap") {mml.lspace = "-1 width"}
- this.Push(mml);
- },
-
- RaiseLower: function (name) {
- var h = this.GetDimen(name);
- var item = STACKITEM.position().With({name: name, move: 'vertical'});
- if (h.charAt(0) === '-') {h = h.slice(1); name = {raise: "\\lower", lower: "\\raise"}[name.substr(1)]}
- if (name === "\\lower") {item.dh = '-'+h; item.dd = h} else {item.dh = h; item.dd = '-'+h}
- this.Push(item);
- },
-
- MoveLeftRight: function (name) {
- var h = this.GetDimen(name);
- var nh = (h.charAt(0) === '-' ? h.slice(1) : '-'+h);
- if (name === "\\moveleft") {var tmp = h; h = nh; nh = tmp}
- this.Push(STACKITEM.position().With({
- name: name, move: 'horizontal',
- left: MML.mspace().With({width: h, mathsize: MML.SIZE.NORMAL, scriptlevel:1}),
- right: MML.mspace().With({width: nh, mathsize: MML.SIZE.NORMAL, scriptlevel:1})
- }));
- },
-
- Hskip: function (name) {
- this.Push(MML.mspace().With({
- width: this.GetDimen(name), mathsize: MML.SIZE.NORMAL, scriptlevel:0
- }));
- },
-
- Rule: function (name,style) {
- var w = this.GetDimen(name),
- h = this.GetDimen(name),
- d = this.GetDimen(name);
- var mml, type = "mspace", def = {width:w, height:h, depth:d};
- if (style !== 'blank') {
- def.mathbackground = (this.stack.env.color || "black");
- type = "mpadded";
- }
- mml = (MML[type])().With(def);
- this.Push(mml);
- },
-
- MakeBig: function (name,mclass,size) {
- size *= TEXDEF.p_height;
- size = String(size).replace(/(\.\d\d\d).+/,'$1')+"em";
- var delim = this.GetDelimiter(name);
- this.Push(MML.TeXAtom(MML.mo(delim).With({
- minsize: size, maxsize: size, scriptlevel: 0,
- fence: TRUE, stretchy: TRUE, symmetric: TRUE
- })).With({texClass: mclass}));
- },
-
- BuildRel: function (name) {
- var top = this.ParseUpTo(name,"\\over");
- var bot = this.ParseArg(name);
- this.Push(MML.TeXAtom(MML.munderover(bot,null,top)).With({mclass: MML.TEXCLASS.REL}));
- },
-
- HBox: function (name,style) {
- this.Push.apply(this,this.InternalMath(this.GetArgument(name),style));
- },
-
- FBox: function (name) {
- this.Push(MML.menclose.apply(MML,this.InternalMath(this.GetArgument(name))));
- },
-
- Require: function (name) {
- var file = this.GetArgument(name); // @@@ FIXME: check for OK URL
- this.Extension(null,file);
- },
-
- Extension: function (name,file,array) {
- if (name && !typeof(name) === "string") {name = name.name}
- file = TEX.extensionDir+"/"+file;
- if (!file.match(/\.js$/)) {file += ".js"}
- if (!MathJax.Ajax.loaded[MathJax.Ajax.fileURL(file)]) {
- if (name != null) {delete TEXDEF[array || 'macros'][name.replace(/^\\/,"")]}
- MathJax.Hub.RestartAfter(MathJax.Ajax.Require(file));
- }
- },
-
- Macro: function (name,macro,argcount) {
- if (argcount) {
- var args = [];
- for (var i = 0; i < argcount; i++) {args.push(this.GetArgument(name))}
- macro = this.SubstituteArgs(args,macro);
- }
- this.string = this.AddArgs(macro,this.string.slice(this.i));
- this.i = 0;
- },
-
- Matrix: function (name,open,close,align,spacing,vspacing,style) {
- var c = this.GetNext(); if (c === "") {TEX.Error("Missing argument for "+name)}
- if (c === "{") {this.i++} else {this.string = c+"}"+this.string.slice(this.i+1); this.i = 0}
- var array = STACKITEM.array().With({
- requireClose: TRUE,
- arraydef: {
- rowspacing: (vspacing||"3pt"),
- columnspacing: (spacing||"1em")
- }
- });
- if (open || close) {array.open = open; array.close = close}
- if (style === "D") {array.arraydef.displaystyle = TRUE}
- if (align != null) {array.arraydef.columnalign = align}
- this.Push(array);
- },
-
- Entry: function (name) {
- this.Push(STACKITEM.cell().With({isEntry: TRUE, name: name}));
- },
-
- Cr: function (name) {
- this.Push(STACKITEM.cell().With({isCR: TRUE, name: name}));
- },
-
- /************************************************************************/
- /*
- * LaTeX environments
- */
-
- Begin: function (name) {
- var env = this.GetArgument(name);
- if (env.match(/[^a-z*]/i)) {TEX.Error('Invalid environment name "'+env+'"')}
- if (!TEXDEF.environment[env]) {TEX.Error('Unknown environment "'+env+'"')}
- var cmd = TEXDEF.environment[env]; if (!(cmd instanceof Array)) {cmd = [cmd]}
- var mml = STACKITEM.begin().With({name: env, end: cmd[1], parse:this});
- if (cmd[0] && this[cmd[0]]) {mml = this[cmd[0]].apply(this,[mml].concat(cmd.slice(2)))}
- this.Push(mml);
- },
- End: function (name) {
- this.Push(STACKITEM.end().With({name: this.GetArgument(name)}));
- },
-
- Equation: function (begin,row) {return row},
-
- ExtensionEnv: function (begin,file) {this.Extension(begin.name,file,"environment")},
-
- Array: function (begin,open,close,align,spacing,vspacing,style,raggedHeight) {
- if (!align) {align = this.GetArgument("\\begin{"+begin.name+"}")}
- var lines = align.replace(/[^clr|]/g,'').replace(/[^|]\|/g,'|').split('').join(' ');
- align = align.replace(/[^clr]/g,'').split('').join(' ');
- align = align.replace(/l/g,'left').replace(/r/g,'right').replace(/c/g,'center');
- var array = STACKITEM.array().With({
- arraydef: {
- columnalign: align,
- columnspacing: (spacing||"1em"),
- rowspacing: (vspacing||"3pt")
- }
- });
- // FIXME: do something about initial (and terminal?) vertical line
- if (lines.match(/\|/))
- {array.arraydef.columnlines = lines.replace(/[^| ]/g,'none').replace(/\|/g,'solid')}
- if (open) {array.open = this.convertDelimiter(open)}
- if (close) {array.close = this.convertDelimiter(close)}
- if (style === "D") {array.arraydef.displaystyle = TRUE}
- if (style === "S") {array.arraydef.scriptlevel = 1} // FIXME: should use mstyle?
- if (raggedHeight) {array.arraydef.useHeight = FALSE}
- this.Push(begin);
- return array;
- },
-
- /************************************************************************/
- /*
- * String handling routines
- */
-
- /*
- * Convert delimiter to character
- */
- convertDelimiter: function (c) {
- if (c) {c = TEXDEF.delimiter[c]}
- if (c == null) {return null}
- if (c instanceof Array) {c = c[0]}
- if (c.length === 4) {c = String.fromCharCode(parseInt(c,16))}
- return c;
- },
-
- /*
- * Trim spaces from a string
- */
- trimSpaces: function (text) {
- if (typeof(text) != 'string') {return text}
- return text.replace(/^\s+|\s+$/g,'');
- },
-
- /*
- * Check if the next character is a space
- */
- nextIsSpace: function () {
- return this.string.charAt(this.i).match(/[ \n\r\t]/);
- },
-
- /*
- * Get the next non-space character
- */
- GetNext: function () {
- while (this.nextIsSpace()) {this.i++}
- return this.string.charAt(this.i);
- },
-
- /*
- * Get and return a control-sequence name
- */
- GetCS: function () {
- var CS = this.string.slice(this.i).match(/^([a-z]+|.) ?/i);
- if (CS) {this.i += CS[1].length; return CS[1]} else {this.i++; return " "}
- },
-
- /*
- * Get and return a TeX argument (either a single character or control sequence,
- * or the contents of the next set of braces).
- */
- GetArgument: function (name,noneOK) {
- switch (this.GetNext()) {
- case "":
- if (!noneOK) {TEX.Error("Missing argument for "+name)}
- return null;
- case '}':
- if (!noneOK) {TEX.Error("Extra close brace or missing open brace")}
- return null;
- case '\\':
- this.i++; return "\\"+this.GetCS();
- case '{':
- var j = ++this.i, parens = 1;
- while (this.i < this.string.length) {
- switch (this.string.charAt(this.i++)) {
- case '\\': this.i++; break;
- case '{': parens++; break;
- case '}':
- if (parens == 0) {TEX.Error("Extra close brace")}
- if (--parens == 0) {return this.string.slice(j,this.i-1)}
- break;
- }
- }
- TEX.Error("Missing close brace");
- break;
- }
- return this.string.charAt(this.i++);
- },
-
- /*
- * Get an optional LaTeX argument in brackets
- */
- GetBrackets: function (name) {
- if (this.GetNext() != '[') {return ''};
- var j = ++this.i, parens = 0;
- while (this.i < this.string.length) {
- switch (this.string.charAt(this.i++)) {
- case '{': parens++; break;
- case '\\': this.i++; break;
- case '}':
- if (parens-- <= 0) {TEX.Error("Extra close brace while looking for ']'")}
- break;
- case ']':
- if (parens == 0) {return this.string.slice(j,this.i-1)}
- break;
- }
- }
- TEX.Error("Couldn't find closing ']' for argument to "+name);
- },
-
- /*
- * Get the name of a delimiter (check it in the delimiter list).
- */
- GetDelimiter: function (name) {
- while (this.nextIsSpace()) {this.i++}
- var c = this.string.charAt(this.i);
- if (this.i < this.string.length) {
- this.i++; if (c == "\\") {c += this.GetCS(name)}
- if (TEXDEF.delimiter[c] != null) {return this.convertDelimiter(c)}
- }
- TEX.Error("Missing or unrecognized delimiter for "+name);
- },
-
- /*
- * Get a dimension (including its units).
- */
- GetDimen: function (name) {
- if (this.nextIsSpace()) {this.i++}
- if (this.string.charAt(this.i) == '{') {
- var dimen = this.GetArgument(name);
- if (dimen.match(/^\s*([-+]?(\.\d+|\d+(\.\d*)?))\s*(pt|em|ex|mu|px|mm|cm|in|pc)\s*$/))
- {return dimen.replace(/ /g,"")}
- } else {
- var dimen = this.string.slice(this.i);
- var match = dimen.match(/^\s*(([-+]?(\.\d+|\d+(\.\d*)?))\s*(pt|em|ex|mu|px|mm|cm|in|pc)) ?/);
- if (match) {
- this.i += match[0].length;
- return match[1].replace(/ /g,"");
- }
- }
- TEX.Error("Missing dimension or its units for "+name);
- },
-
- /*
- * Get everything up to the given control sequence (token)
- */
- GetUpTo: function (name,token) {
- while (this.nextIsSpace()) {this.i++}
- var j = this.i, k, c, parens = 0;
- while (this.i < this.string.length) {
- k = this.i; c = this.string.charAt(this.i++);
- switch (c) {
- case '\\': c += this.GetCS(); break;
- case '{': parens++; break;
- case '}':
- if (parens == 0) {TEX.Error("Extra close brace while looking for "+token)}
- parens--;
- break;
- }
- if (parens == 0 && c == token) {return this.string.slice(j,k)}
- }
- TEX.Error("Couldn't find "+token+" for "+name);
- },
-
- /*
- * Parse various substrings
- */
- ParseArg: function (name) {return TEX.Parse(this.GetArgument(name),this.stack.env).mml()},
- ParseUpTo: function (name,token) {return TEX.Parse(this.GetUpTo(name,token),this.stack.env).mml()},
-
- /*
- * Break up a string into text and math blocks
- * @@@ FIXME: skip over braced groups? @@@
- * @@@ FIXME: pass environment to TEX.Parse? @@@
- */
- InternalMath: function (text,level) {
- var def = {displaystyle: FALSE}; if (level != null) {def.scriptlevel = level}
- if (this.stack.env.font) {def.mathvariant = this.stack.env.font}
- if (!text.match(/\$|\\\(/)) {return [MML.mtext(MML.chars(text)).With(def)]}
- var i = 0, k = 0, c, match = '';
- var mml = [];
- while (i < text.length) {
- c = text.charAt(i++);
- if (c === '$') {
- if (match === '$') {
- mml.push(MML.TeXAtom(TEX.Parse(text.slice(k,i-1)).mml().With(def)));
- match = ''; k = i;
- } else {
- if (k < i-1) {mml.push(MML.mtext(MML.chars(text.slice(k,i-1))).With(def))}
- match = '$'; k = i;
- }
- } else if (c === '\\') {
- c = text.charAt(i++);
- if (c === '(' && match == '') {
- if (k < i-2) {mml.push(MML.mtext(MML.chars(text.slice(k,i-2))).With(def))}
- match = ')'; k = i;
- } else if (c === ')' && match === ')') {
- mml.push(MML.TeXAtom(TEX.Parse(text.slice(k,i-2)).mml().With(def)));
- match = ''; k = i;
- }
- }
- }
- if (match !== '') {TEX.Error("Math not terminated in text box")}
- if (k < text.length) {mml.push(MML.mtext(MML.chars(text.slice(k))).With(def))}
- return mml;
- },
-
- /*
- * Replace macro paramters with their values
- */
- SubstituteArgs: function (args,string) {
- var text = ''; var newstring = ''; var c; var i = 0;
- while (i < string.length) {
- c = string.charAt(i++);
- if (c === "\\") {text += c + string.charAt(i++)}
- else if (c === '#') {
- c = string.charAt(i++);
- if (c === '#') {text += c} else {
- if (!c.match(/[1-9]/) || c > args.length)
- {TEX.Error("Illegal macro parameter reference")}
- newstring = this.AddArgs(this.AddArgs(newstring,text),args[c-1]);
- text = '';
- }
- } else {text += c}
- }
- return this.AddArgs(newstring,text);
- },
-
- /*
- * Make sure that macros are followed by a space if their names
- * could accidentally be continued into the following text.
- */
- AddArgs: function (s1,s2) {
- if (s2.match(/^[a-z]/i) && s1.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)) {s1 += ' '}
- return s1+s2;
- }
-
- });
-
- /************************************************************************/
-
- TEX.Augment({
- Translate: function (script) {
- var mml, math = script.innerHTML.replace(/^\s+/,"").replace(/\s+$/,"");
- if (MathJax.Hub.Browser.isKonqueror)
- {math = math.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}
- var displaystyle =
- (script.type.replace(/\n/g," ").match(/(;|\s|\n)mode\s*=\s*display(;|\s|\n|$)/) != null);
- math = TEX.prefilterMath(math,displaystyle,script);
- try {
- mml = TEX.Parse(math).mml();
-// mml = MML.semantics(mml,MML.annotation(math).With({encoding:"application:x-tex"}));
- } catch(err) {
- if (!err.texError) {throw err}
- mml = this.formatError(err,math,displaystyle,script);
- }
- if (mml.inferred) {mml = MML.apply(MathJax.ElementJax,mml.data)} else {mml = MML(mml)}
- if (displaystyle) {mml.root.display = "block"}
- return mml;
- },
- prefilterMath: function (math,displaystyle,script) {return math},
- formatError: function (err,math,displaystyle,script) {
- return MML.merror(err.message.replace(/\n.*/,""));
- },
- Error: function (message) {
- throw MathJax.Hub.Insert(Error(message),{texError: TRUE});
- },
- Macro: function (name,def,argn) {
- TEXDEF.macros[name] = ['Macro'].concat([].slice.call(arguments,1));
- }
- });
-
- TEX.loadComplete("jax.js");
-
-})(MathJax.InputJax.TeX);