17 lines
6.0 KiB
JavaScript
17 lines
6.0 KiB
JavaScript
/*
|
|
* /MathJax/extensions/TeX/mhchem.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.Hub.Register.StartupHook("TeX Jax Ready",function(){var b="1.0";var d=MathJax.InputJax.TeX,a=d.Definitions.macros;var c=MathJax.Object.Subclass({string:"",i:0,tex:"",atom:false,sup:"",sub:"",Init:function(e){this.string=e},ParseTable:{"-":"Minus","+":"Plus","(":"Open",")":"Close","[":"Open","]":"Close","<":"Less","^":"Superscript",_:"Subscript","*":"Dot",".":"Dot","=":"Equal","#":"Pound","$":"Math","\\":"Macro"," ":"Space",},Arrows:{"->":"rightarrow","<-":"leftarrow","<->":"leftrightarrow","<=>":"rightleftharpoons","<=>>":"Rightleftharpoons","^":"uparrow",v:"downarrow"},Bonds:{"-":"-","=":"=","#":"\\equiv","~":"\\tripledash","~-":"\\begin{CEstack}{}\\tripledash\\\\-\\end{CEstack}","~=":"\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}","~--":"\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}","-~-":"\\raise2mu{\\begin{CEstack}{}-\\\\\\tripledash\\\\-\\end{CEstack}}","...":"{\\cdot}{\\cdot}{\\cdot}","....":"{\\cdot}{\\cdot}{\\cdot}{\\cdot}","->":"\\rightarrow","<-":"\\leftarrow","??":"\\text{??}"},Parse:function(){this.tex="";this.atom=false;while(this.i<this.string.length){var e=this.string.charAt(this.i);if(e.match(/[a-z]/i)){this.ParseLetter()}else{if(e.match(/[0-9]/)){this.ParseNumber()}else{this["Parse"+(this.ParseTable[e]||"Other")](e)}}}this.FinishAtom();return this.tex},ParseLetter:function(){this.FinishAtom();if(this.Match(/^v( |$)/)){this.tex+="{\\"+this.Arrows.v+"}"}else{this.tex+="\\text{"+this.Match(/^[a-z]+/i)+"}";this.atom=true}},ParseNumber:function(){var f=this.Match(/^\d+/);if(this.atom&&!this.sub){this.sub=f}else{this.FinishAtom();var e=this.Match(/^\/\d+/);if(e){this.tex+="\\frac{"+f+"}{"+e.substr(1)+"}";this.i+=e.length}else{this.tex+=f;if(this.i<this.string.length){this.tex+="\\,"}}}},ParseMinus:function(e){if(this.atom&&this.i===this.string.length-1){this.sup+=e}else{this.FinishAtom();if(this.string.substr(this.i,2)==="->"){this.i+=2;this.AddArrow("->");return}else{this.tex+="{-}"}}this.i++},ParsePlus:function(e){if(this.atom){this.sup+=e}else{this.FinishAtom();this.tex+=e}this.i++},ParseDot:function(e){this.FinishAtom();this.tex+="\\cdot ";this.i++},ParseEqual:function(e){this.FinishAtom();this.tex+="{=}";this.i++},ParsePound:function(e){this.FinishAtom();this.tex+="{\\equiv}";this.i++},ParseOpen:function(f){this.FinishAtom();var e=this.Match(/^\([v^]\)/);if(e){this.tex+="{\\"+this.Arrows[e.charAt(1)]+"}"}else{this.tex+="{"+f;this.i++}},ParseClose:function(e){this.FinishAtom();this.atom=true;this.tex+=e+"}";this.i++},ParseLess:function(f){this.FinishAtom();var e=this.Match(/^(<->?|<=>>?)/);if(!e){this.tex+=f;this.i++}else{this.AddArrow(e)}},ParseSuperscript:function(g){g=this.string.charAt(++this.i);if(g==="{"){this.i++;var e=this.Find("}");if(e==="-."){this.sup+="{-}{\\cdot}"}else{if(e){this.sup+=c(e).Parse()}}}else{if(g===" "||g===""){this.tex+="{\\"+this.Arrows["^"]+"}";this.i++}else{var f=this.Match(/^(\d+|-\.)/);if(f){this.sup+=f}}}},ParseSubscript:function(f){if(this.string.charAt(++this.i)=="{"){this.i++;this.sub+=c(this.Find("}")).Parse()}else{var e=this.Match(/^\d+/);if(e){this.sub+=e}}},ParseMath:function(e){this.FinishAtom();this.i++;this.tex+=this.Find(e)},ParseMacro:function(g){this.FinishAtom();this.i++;var e=this.Match(/^([a-z]+|.)/i)||" ";if(e==="sbond"){this.tex+="{-}"}else{if(e==="dbond"){this.tex+="{=}"}else{if(e==="tbond"){this.tex+="{\\equiv}"}else{if(e==="bond"){var f=(this.Match(/^\{.*?\}/)||"");f=f.substr(1,f.length-2);this.tex+="{"+(this.Bonds[f]||"\\text{??}")+"}"}else{if(e==="{"){this.tex+="{\\{"}else{if(e==="}"){this.tex+="\\}}";this.atom=true}else{this.tex+=g+e}}}}}}},ParseSpace:function(e){this.FinishAtom();this.i++},ParseOther:function(e){this.FinishAtom();this.tex+=e;this.i++},AddArrow:function(f){var h=this.Match(/^[CT]\[/);if(h){this.i--;h=h.charAt(0)}var e=this.GetBracket(h),g=this.GetBracket(h);f=this.Arrows[f];if(e||g){if(g){f+="["+g+"]"}f+="{"+e+"}";f="\\mathrel{\\x"+f+"}"}else{f="\\long"+f+" "}this.tex+=f},FinishAtom:function(){if(this.sup||this.sub){if(this.sup&&this.sub&&!this.atom){var g=Math.abs(this.sup.length-this.sub.length);if(g){var f="0000000000".substr(0,g);var e=(this.sup.length>this.sub.length?"sub":"sup");this[e]="\\phantom{"+f+"}"+this[e]}}if(!this.sup){this.sup="\\Space{0pt}{0pt}{.2em}"}this.tex+="^{"+this.sup+"}_{"+this.sub+"}";this.sup=this.sub=""}this.atom=false},GetBracket:function(f){if(this.string.charAt(this.i)!=="["){return""}this.i++;var e=this.Find("]");if(f==="C"){e="\\ce{"+e+"}"}else{if(f==="T"){if(!e.match(/^\{.*\}$/)){e="{"+e+"}"}e="\\text"+e}}return e},Match:function(f){var e=f.exec(this.string.substr(this.i));if(e){e=e[0];this.i+=e.length}return e},Find:function(j){var e=this.string.length,f=this.i,h=0;while(this.i<e){var g=this.string.charAt(this.i++);if(g===j&&h===0){return this.string.substr(f,this.i-f-1)}if(g==="{"){h++}else{if(g==="}"){if(h){h--}else{d.Error("Extra close brace or missing open brace")}}}}if(h){d.Error("Missing close brace")}d.Error("Can't find closing "+j)}});a.ce="CE";a.cf="CE";a.cee="CE";a.xleftrightarrow=["xArrow",8596,6,6];a.xrightleftharpoons=["xArrow",8652,5,7];a.xRightleftharpoons=["xArrow",8652,5,7];a.longrightleftharpoons=["Macro","\\stackrel{\\textstyle{{-}\\!\\!{\\rightharpoonup}}}{\\smash{{\\leftharpoondown}\\!\\!{-}}}"];a.longRightleftharpoons=["Macro","\\stackrel{\\textstyle{-}\\!\\!{\\rightharpoonup}}{\\small\\smash\\leftharpoondown}"];a.tripledash=["Macro","\\raise3mu{\\tiny\\text{-}\\kern2mu\\text{-}\\kern2mu\\text{-}}"];d.Definitions.environment.CEstack=["Array",null,null,null,"r",null,"0.001em","T",1];d.Parse.Augment({CE:function(g){var e=this.GetArgument(g);var f=c(e).Parse();this.string=f+this.string.substr(this.i);this.i=0}});MathJax.Hub.Startup.signal.Post("TeX mhchem Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mhchem.js");
|
|
|