From 4d0f54d4eddfa63ca9a2e07d27cfafc6d40a1127 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Thu, 13 Apr 2017 12:20:59 -0400 Subject: [PATCH 01/16] Don't translate cdn.mathjax.org addresses any more. --- unpacked/MathJax.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 8e905241f..be2517741 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -3130,9 +3130,7 @@ MathJax.Hub.Startup = { else {STARTUP.params[params[j]] = true} } } - CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,'') - // convert mathjax/latest to mathjax/x.y-latest so that all files are the same version - .replace(/^(https?:\/\/cdn.mathjax.org\/mathjax\/)(latest)/,"$1"+BASE.version.split(/\./).slice(0,2).join(".")+"-$2"); + CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,''); BASE.Ajax.config.root = CONFIG.root; BASE.Ajax.params = STARTUP.params; break; From 4ddd35cd1c56d296611b3ddc5d093e52b471627a Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Thu, 13 Apr 2017 13:54:52 -0400 Subject: [PATCH 02/16] Add mhchem version 3, and adjust legcy mhchem to load it from the correct location. --- extensions/TeX/mhchem3/mhchem.js | 336 ++++ unpacked/extensions/TeX/mhchem.js | 7 +- unpacked/extensions/TeX/mhchem3/mhchem.js | 1715 +++++++++++++++++++++ 3 files changed, 2056 insertions(+), 2 deletions(-) create mode 100644 extensions/TeX/mhchem3/mhchem.js create mode 100644 unpacked/extensions/TeX/mhchem3/mhchem.js diff --git a/extensions/TeX/mhchem3/mhchem.js b/extensions/TeX/mhchem3/mhchem.js new file mode 100644 index 000000000..b5c3e3562 --- /dev/null +++ b/extensions/TeX/mhchem3/mhchem.js @@ -0,0 +1,336 @@ +/************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2017 Martin Hensel + * + * 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["TeX/mhchem"]={version:"3.0.6"},MathJax.Hub.Register.StartupHook("TeX Jax Ready", +function(){var n=MathJax.InputJax.TeX,r=MathJax.Object.Subclass({string:"",Init: +function(n){this.string=n},Parse: +function(r){try{return o.go(t.go(this.string,r))}catch(r){n.Error(r)}}}),t={};t.go= +function(n,r){if(!n)return n;void 0===r&&(r="ce");var o="0",a={};a.pL=0,n=n.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),n=n.replace(/[\u2026]/g,"...");for(var e,u,i=[];;){e!==n?(u=10,e=n):u--;var s=t.c[r],l=s.e.length;n:for(var h=0;h0))return i;if(c.s||(n=f.t),!c.u)break n}}}if(u<=0)throw["MhchemBugU","mhchem bug U. Please report."]}}, +t.j= +function(n,r){return r?n?n.concat(r):[].concat(r):n},t.w={"~C":/^$/,"~A":/^./,"~B":/^./,"%m":/^\s/,"%l":/^\s(?=[A-Z\\$])/,"~@":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,"~M":/^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,"@z":/^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,"~P":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,"@%":/^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,"~O":/^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,"~u":/^[0-9]+/,"@h":/^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,"@g":/^[+\-]?[0-9]+(?:[.,][0-9]+)?/,"%T": +function(n){var r=n.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);return r&&r[0]?{h:r.splice(1),t:n.substr(r[0].length)}:null},aj: +function(n){var r=n.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);return r&&r[0]?{h:r.splice(1),t:n.substr(r[0].length)}:null},"%n": +function(n){var r=this["@W"](n,"",/^\([a-z]{1,3}(?=[\),])/,")","");if(r&&r.t.match(/^($|[\s,;\)\]\}])/))return r;var t=n.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/);return t?{h:t[0],t:n.substr(t[0].length)}:null},ae:/^_\{(\([a-z]{1,3}\))\}/,"@K":/^(?:\\\{|\[|\()/,"@c":/^(?:\)|\]|\\\})/,", ":/^[,;]\s*/,",":/^[,;]/,".":/^[.]/,". ":/^([.\u22C5\u00B7\u2022])\s*/,"@i":/^\.\.\.(?=$|[^.])/,"* ":/^([*])\s*/,"@P": +function(n){return this["@W"](n,"^{","","","}")},"@L": +function(n){return this["@W"](n,"^","$","$","")},"^a":/^\^([0-9]+|[^\\_])/,"@O": +function(n){return this["@W"](n,"^",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@N": +function(n){return this["@W"](n,"^",/^\\[a-zA-Z]+\{/,"}","")},"^\\x":/^\^(\\[a-zA-Z]+)\s*/,"%U":/^\^(-?\d+)/,"'":/^'/,"@Y": +function(n){return this["@W"](n,"_{","","","}")},"@Q": +function(n){return this["@W"](n,"_","$","$","")},_9:/^_([+\-]?[0-9]+|[^\\])/,"@T": +function(n){return this["@W"](n,"_",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@S": +function(n){return this["@W"](n,"_",/^\\[a-zA-Z]+\{/,"}","")},"@R":/^_(\\[a-zA-Z]+)\s*/,"^_":/^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,"{}":/^\{\}/,"%B": +function(n){return this["@W"](n,"","{","}","")},"%A": +function(n){return this["@W"](n,"{","","","}")},"@~": +function(n){return this["@W"](n,"","$","$","")},"@a": +function(n){return this["@W"](n,"${","","","}$")},"@@": +function(n){return this["@W"](n,"$","","","$")},"%D":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]\/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"@f":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,ai:/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,"~Q":/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,"~c":/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"@r": +function(n){return this["@W"](n,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,"@m":/^[CMT](?=\[)/,"@o": +function(n){return this["@W"](n,"[","","","]")},al:/^(&|@q|\\hline)\s*/,"@p":/^(?:\\[,\ ;:])/,"@G": +function(n){return this["@W"](n,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@F": +function(n){return this["@W"](n,"",/^\\[a-zA-Z]+\{/,"}","")},"@t":/^\\ca(?:\s+|(?![a-zA-Z]))/,"@E":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,"~R":/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,"~S":/^[\/~|]/,"@y": +function(n){return this["@W"](n,"\\frac{","","","}","{","","","}")},"@A": +function(n){return this["@W"](n,"\\overset{","","","}","{","","","}")},"@C": +function(n){return this["@W"](n,"\\underset{","","","}","{","","","}")},"@B": +function(n){return this["@W"](n,"\\underbrace{","","","}_","{","","","}")},"@w": +function(n){return this["@W"](n,"\\color{","","","}")},"@x": +function(n){return this["@W"](n,"\\color{","","","}","{","","","}")},"@v": +function(n){return this["@W"](n,"\\color","\\","",/^(?=\{)/,"{","","","}")},"@u": +function(n){return this["@W"](n,"\\ce{","","","}")},"~Z":/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"a~":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"%d":/^[IVX]+/,"@j":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,"~%": +function(n){var r;if(r=n.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{h:r[0],t:n.substr(r[0].length)};var t=this["@W"](n,"","$","$","");return t&&(r=t.h.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{h:r[0],t:n.substr(r[0].length)}:null},"~a": +function(n){return this["~%"](n)},"@b":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,"~E": +function(n){if(n.match(/^\([a-z]+\)$/))return null;var r=n.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return r?{h:r[0],t:n.substr(r[0].length)}:null},"%z":/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"~v":/^pK([abw]|eq|sp)(?=$|[^a-zA-Z0-9])/,"~w":/^pK_([abw])/,"~x":/^pK_{([abw]|eq|sp)}/,"pK(a1)":/^pK([ab])([123])(?=$|[^a-zA-Z0-9])/,"pK_{(a1)}":/^pK_{([ab])([123])}/,ab:/^K([abwfcp]|eq|sp)(?=$|[^a-zA-Z0-9])/,ac:/^K_([abwfcpCP])/,ad:/^K_{([abwfcpCP]|eq|sp)}/,"K(a1)":/^K([ab])([123])(?=$|[^a-zA-Z0-9])/,"K_{(a1)}":/^K_{([ab])([123])}/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*\*\s*/,"@W": +function(n,r,t,o,a,e,u,i,s,l){var h=this["@V"](n,r);if(null===h)return null;if(n=n.substr(h.length),h=this["@V"](n,t),null===h)return null;var p=this["@U"](n,h.length,o||a);if(null===p)return null;var c=n.substring(0,o?p.y:p.z);if(e||u){var f=this["@W"](n.substr(p.y),e,u,i,s);if(null===f)return null;var m=[c,f.h];return l&&(m=m.join("")),{h:m,t:f.t}}return{h:c,t:n.substr(p.y)}}, +"@V": +function(n,r){if("string"==typeof r)return 0!==n.indexOf(r)?null:r;var t=n.match(r);return t?t[0]:null},"@U": +function(n,r,t){for(var o=0;r":{"0|1|2|3":{k:"r=",n:"r"},"a|as":{k:["~T","r="],n:"r"},"*":{k:["~T","r="],n:"r"}}, +"+":{o:{k:"~t",n:"d"},"d|D":{k:"d=",n:"d"},q:{k:"d=",n:"qd"},"qd|qD":{k:"d=",n:"qd"},dq:{k:["~T","d="],n:"d"},3:{k:["%j","~T","~Q"],n:"0"}}, +"~%":{"0|2":{k:"a=",n:"a"}}, +ai:{"0|1|2|a|as":{k:["%j","~T",{l:"~Q",m:"\\pm"}],n:"0"}}, +"~Q":{"0|1|2|a|as":{k:["%j","~T","~Q"],n:"0"}}, +"-$":{"o|q":{k:["~g","~T"],n:"qd"},d:{k:"d=",n:"d"},D:{k:["~T",{l:"~f",m:"-"}],n:"3"},q:{k:"d=",n:"qd"},qd:{k:"d=",n:"qd"},"qD|dq":{k:["~T",{l:"~f",m:"-"}],n:"3"}}, +"-9":{"3|o":{k:["~T",{l:"~J",m:"~I"}],n:"3"}}, +"@f":{o:{k:{l:"@e",m:!0},n:"2"},d:{k:{l:"@d",m:!0},n:"2"}}, +"-":{"0|1|2":{k:[{l:"~T",m:1},"%E",{l:"~f",m:"-"}],n:"3"},3:{k:{l:"~f",m:"-"}}, +a:{k:["~T",{l:"~J",m:"~I"}],n:"2"},as:{k:[{l:"~T",m:2},{l:"~f",m:"-"}],n:"3"},b:{k:"b="},o:{k:"@e",n:"2"},q:{k:"@e",n:"2"},"d|qd|dq":{k:"@d",n:"2"},"D|qD|p":{k:["~T",{l:"~f",m:"-"}],n:"3"}}, +"~a":{"1|3":{k:"a=",n:"a"}}, +"~M":{"0|1|2|3|a|as|b|p|bp|o":{k:"o=",n:"o"},"q|dq":{k:["~T","o="],n:"o"},"d|D|qd|qD":{k:"~N",n:"o"}}, +"~u":{o:{k:"q=",n:"q"},"d|D":{k:"q=",n:"dq"},q:{k:["~T","o="],n:"o"},a:{k:"o=",n:"o"}}, +"%l":{"b|p|bp":{}}, +"%m":{a:{n:"as"},0:{k:"%j"},"1|2":{k:"%k"},"r|rt|rd|%i|%h":{k:"~T",n:"0"},"*":{k:["~T","%k"],n:"1"}}, +al:{"1|2":{k:["~T",{l:"~K",m:"al"}]}, +"*":{k:["~T",{l:"~K",m:"al"}],n:"0"}}, +"@o":{"r|rt":{k:"%a",n:"rd"},"rd|%i":{k:"%f",n:"%h"}}, +"@i":{"o|d|D|dq|qd|qD":{k:["~T",{l:"~f",m:"..."}],n:"3"},"*":{k:[{l:"~T",m:1},{l:"~J",m:"~z"}],n:"1"}}, +". |* ":{"*":{k:["~T",{l:"~J",m:"~~"}],n:"1"}}, +"%n":{"*":{k:["~T","%p"],n:"1"}}, +"@K":{"a|as|o":{k:["o=","~T","%G"],n:"2"},"0|1|2|3":{k:["o=","~T","%G"],n:"2"},"*":{k:["~T","o=","~T","%G"],n:"2"}}, +"@c":{"0|1|2|3|b|p|bp|o":{k:["o=","%H"],n:"o"},"a|as|d|D|q|qd|qD|dq":{k:["~T","o=","%H"],n:"o"}}, +", ":{"*":{k:["~T","~q"],n:"0"}}, +"^_":{"*":{}}, +"@P|@L":{"0|1|2|as":{k:"b=",n:"b"},p:{k:"b=",n:"bp"},"3|o":{k:"~t",n:"D"},q:{k:"d=",n:"qD"},"d|D|qd|qD|dq":{k:["~T","d="],n:"D"}}, +"^a|@O|@N|^\\x|'":{"0|1|2|as":{k:"b=",n:"b"},p:{k:"b=",n:"bp"},"3|o":{k:"~t",n:"d"},q:{k:"d=",n:"qd"},"d|qd|D|qD":{k:"d="},dq:{k:["~T","d="],n:"d"}}, +ae:{"d|D|q|qd|qD|dq":{k:["~T","q="],n:"q"}}, +"@Y|@Q|_9|@T|@S|@R":{"0|1|2|as":{k:"p=",n:"p"},b:{k:"p=",n:"bp"},"3|o":{k:"q=",n:"q"},"d|D":{k:"q=",n:"dq"},"q|qd|qD|dq":{k:["~T","q="],n:"q"}}, +"%D":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{k:[{l:"~T",m:2},"~f"],n:"3"}}, +"#":{"0|1|2|3|a|as|o":{k:[{l:"~T",m:2},{l:"~f",m:"#"}],n:"3"}}, +"{}":{"*":{k:{l:"~T",m:1},n:"1"}}, +"%B":{"0|1|2|3|a|as|b|p|bp":{k:"o=",n:"o"},"o|d|D|q|qd|qD|dq":{k:["~T","o="],n:"o"}}, +"@~":{a:{k:"a="},"0|1|2|3|as|b|p|bp|o":{k:"o=",n:"o"},"as|o":{k:"o="},"q|d|D|qd|qD|dq":{k:["~T","o="],n:"o"}}, +"@r":{"*":{k:[{l:"~T",m:2},"~f"],n:"3"}}, +"@y":{"*":{k:[{l:"~T",m:1},"~H"],n:"3"}}, +"@A":{"*":{k:[{l:"~T",m:2},"~X"],n:"3"}}, +"@C":{"*":{k:[{l:"~T",m:2},"%y"],n:"3"}}, +"@B":{"*":{k:[{l:"~T",m:2},"%w"],n:"3"}}, +"@x|@v":{"*":{k:[{l:"~T",m:2},"~k"],n:"3"}}, +"@w":{"*":{k:[{l:"~T",m:2},"~m"]}}, +"@u":{"*":{k:[{l:"~T",m:2},"ce"],n:"3"}}, +"@p":{"*":{k:[{l:"~T",m:1},"~s"],n:"1"}}, +"@G|@F|@E":{"0|1|2|3|a|as|b|p|bp|o|c0":{k:["o=","~T"],n:"3"},"*":{k:["~T","o=","~T"],n:"3"}}, +"~S":{"*":{k:[{l:"~T",m:1},"~s"],n:"3"}}, +"~B":{a:{k:"@Z",n:"o",s:!0},as:{k:[{l:"~T"},"%k"],n:"1",s:!0},"r|rt|rd|%i|%h":{k:["~T"],n:"0",s:!0},"*":{k:["~T","~s"],n:"3"}}}),g:{"~N": +function(n,r){var o;if(n.d.match(/^[0-9]+$/)){var a=n.d;n.d=void 0,o=this["~T"](n),n.b=a}else o=this["~T"](n);return t.g["o="](n,r),o},"~t": +function(n,r){n.d=r,n["%I"]="kv"},"~g": +function(n,r){if(n.yB){var o=t.j(o,this["~T"](n));return o=t.j(o,t.g["~f"](n,r,"-"))}n.d=r},"@e": +function(n,r,o){var a=o||this["@X"](n,r),e=t.j(null,this["~T"](n,r));return e=a?t.j(e,{l:"~I"}):t.j(e,t.g["~f"](n,r,"-"))},"@d": +function(n,r,o){var a,e=o||this["@X"](n,r);if(e)a=t.j(a,this["~T"](n,r)),a=t.j(a,{l:"~I"});else{var u=t.h("~u",n.d||"");u&&""===u.t?(a=t.j(null,t.g["d="](n,r)),a=t.j(a,this["~T"](n))):(a=t.j(a,this["~T"](n,r)),a=t.j(a,t.g["~f"](n,r,"-")))}return a},"@X": +function(n,r){var o=t.h("~R",n.o||""),a=t.h("~O",n.o||""),e=t.h("~P",n.o||""),u=t.h("@%",n.o||""),i="-"===r&&(o&&""===o.t||a||e||u);return!i||n.a||n.b||n.p||n.d||n.q||o||!e||(n.o="$"+n.o+"$"),i},"@Z": +function(n,r){n.o=n.a,n.a=void 0},"%k": +function(n,r){n.sb=!0},"%j": +function(n,r){n.sb=!1},"%E": +function(n,r){n.yB=!0},"%F": +function(n,r){n.yB=!1},"%G": +function(n,r){n.pL++},"%H": +function(n,r){n.pL--},"%p": +function(n,r){return r=t.go(r,"o"),{l:"%p",p1:r}}, +"~q": +function(n,r){var t=r.replace(/\s*$/,""),o=t!==r;return o&&0===n.pL?{l:"~n",p1:t}:{l:"~o",p1:t}}, +"~T": +function(n,r,o){var a;n.r?("M"===n.rdt?n.rd=t.go(n.rd,"%r"):"T"===n.rdt?n.rd=[{l:"%s",p1:n.rd}]:n.rd=t.go(n.rd),"M"===n.rqt?n.rq=t.go(n.rq,"%r"):"T"===n.rqt?n.rq=[{l:"%s",p1:n.rq}]:n.rq=t.go(n.rq),a={l:"~b",r:n.r,rd:n.rd,rq:n.rq}):(a=[],n.a||n.b||n.p||n.o||n.q||n.d||o?(n.sb&&a.push({l:"~D"}),n.o||n.q||n.d||n.b||n.p||2===o?n.o||n.q||n.d||!n.b&&!n.p?n.o&&"kv"===n["%I"]&&t.h("a~",n.d||"")?n["%I"]="~Y":n.o&&"kv"===n["%I"]&&!n.q&&(n["%I"]=void 0):(n.o=n.a,n.d=n.b,n.q=n.p,n.a=n.b=n.p=void 0):(n.o=n.a,n.a=void 0),n.a=t.go(n.a,"a"),n.b=t.go(n.b,"bd"),n.p=t.go(n.p,"pq"),n.o=t.go(n.o,"o"),"~Y"===n["%I"]?n.d=t.go(n.d,"~Y"):n.d=t.go(n.d,"bd"),n.q=t.go(n.q,"pq"),a.push({l:"~h",a:n.a,b:n.b,p:n.p,o:n.o,q:n.q,d:n.d,"%I":n["%I"]})):a=null);for(var e in n)"pL"!==e&&"yB"!==e&&delete n[e];return a},"a%": +function(n,r){var o=["{"];return o=t.j(o,t.go(r,"~Y")),o=o.concat(["}"])},"~H": +function(n,r){return{l:"~G",p1:t.go(r[0]),p2:t.go(r[1])}}, +"~X": +function(n,r){return{l:"~W",p1:t.go(r[0]),p2:t.go(r[1])}}, +"%y": +function(n,r){return{l:"%x",p1:t.go(r[0]),p2:t.go(r[1])}}, +"%w": +function(n,r){return{l:"%v",p1:t.go(r[0]),p2:t.go(r[1])}}, +"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1])}}, +"r=": +function(n,r){n.r=(n.r||"")+r},"%b": +function(n,r){n.rdt=(n.rdt||"")+r},"%a": +function(n,r){n.rd=(n.rd||"")+r},"%g": +function(n,r){n.rqt=(n.rqt||"")+r},"%f": +function(n,r){n.rq=(n.rq||"")+r},"~Q": +function(n,r,t){return{l:"~Q",A:t||r}}}}, +t.c.a={e:t.C({"~C":{"*":{}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"1",s:!0}}, +"@@":{"*":{k:"%q",n:"1"}}, +",":{"*":{k:{l:"~J",m:"~r"}}}, +"~B":{"*":{k:"~s"}}}),g:{}}, +t.c.o={e:t.C({"~C":{"*":{}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"1",s:!0}}, +"~M":{"*":{k:"rm"}}, +"@t":{"*":{k:{l:"~J",m:"~i"}}}, +"@G|@F|@E":{"*":{k:"~s"}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%C"}}, +"~B":{"*":{k:"~s"}}}),g:{}}, +t.c["%s"]={e:t.C({"~C":{"*":{k:"~T"}}, +"%B":{"*":{k:"%t"}}, +"@a|@@":{"*":{k:"%r"}}, +"@z":{"*":{k:["~T","rm"]}}, +"@p|@G|@F|@E":{"*":{k:["~T","~s"]}}, +"~A":{"*":{k:"%t"}}}),g:{"~T": +function(n,r){if(n.text){var t={l:"%s",p1:n.text};for(var o in n)delete n[o];return t}return null}}}, +t.c.pq={e:t.C({"~C":{"*":{}}, +"%n":{"*":{k:"%p"}}, +i$:{0:{n:"!f",s:!0}}, +"@b":{0:{k:"rm",n:"0"}}, +"~E":{0:{n:"f",s:!0}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"!f",s:!0}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%s"}}, +"~@":{f:{k:"%r"}}, +"~M":{"*":{k:"rm"}}, +"@h":{"*":{k:"@l"}}, +",":{"*":{k:{l:"~K",m:"~p"}}}, +"@x|@v":{"*":{k:"~k"}}, +"@w":{"*":{k:"~m"}}, +"@u":{"*":{k:"ce"}}, +"@p|@G|@F|@E":{"*":{k:"~s"}}, +"~B":{"*":{k:"~s"}}}),g:{"%p": +function(n,r){return r=t.go(r,"o"),{l:"%K",p1:r}}, +"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1],"pq")}}}}, +t.c.bd={e:t.C({"~C":{"*":{}}, +x$:{0:{n:"!f",s:!0}}, +"~E":{0:{n:"f",s:!0}}, +"~A":{0:{n:"!f",s:!0}}, +"@g":{"*":{k:"@l"}}, +".":{"*":{k:{l:"~J",m:"~y"}}}, +"~@":{f:{k:"%r"}}, +x:{"*":{k:{l:"~J",m:"@n"}}}, +"~M":{"*":{k:"rm"}}, +"'":{"*":{k:{l:"~J",m:"%%"}}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%s"}}, +"@x|@v":{"*":{k:"~k"}}, +"@w":{"*":{k:"~m"}}, +"@u":{"*":{k:"ce"}}, +"@p|@G|@F|@E":{"*":{k:"~s"}}, +"~B":{"*":{k:"~s"}}}),g:{"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1],"bd")}}}}, +t.c["~Y"]={e:t.C({"~C":{"*":{}}, +"%d":{"*":{k:"%e"}}, +"@a|@@":{"*":{k:"%r"}}, +"~A":{"*":{k:"~s"}}}),g:{"%e": +function(n,r){return{l:"%d",p1:r}}}}, +t.c["%r"]={e:t.C({"~C":{"*":{k:"~T"}}, +"@u":{"*":{k:["~T","ce"]}}, +"%B|@p|@G|@F|@E":{"*":{k:"o="}}, +"~A":{"*":{k:"o="}}}),g:{"~T": +function(n,r){if(n.o){var t={l:"%r",p1:n.o};for(var o in n)delete n[o];return t}return null}}}, +t.c["%q"]={e:t.C({"~C":{"*":{k:"~T"}}, +"@u":{"*":{k:["~T","ce"]}}, +"%B|@p|@G|@F|@E":{"*":{k:"o="}}, +"-|+":{"*":{k:"%u"}}, +"~A":{"*":{k:"o="}}}),g:{"%u": +function(n,r){n.o=(n.o||"")+"{"+r+"}"},"~T": +function(n,r){if(n.o){var t={l:"%r",p1:n.o};for(var o in n)delete n[o];return t}return null}}}, +t.c["@l"]={e:t.C({"~C":{"*":{}}, +",":{"*":{k:"~q"}}, +"~A":{"*":{k:"~s"}}}),g:{"~q": +function(n,r){return{l:"~r"}}}}, +t.c.pu={e:t.C({"~C":{"*":{k:"~T"}}, +"@K|@c":{"0|a":{k:"~s"}}, +aj:{0:{k:"ak",n:"a"}}, +"%T":{0:{k:"%Z",n:"a"}}, +"%m":{"0|a":{}}, +ai:{"0|a":{k:{l:"~Q",m:"\\pm"},n:"0"}}, +"~Q":{"0|a":{k:"~s",n:"0"}}, +"//":{d:{k:"o=",n:"/"}}, +"/":{d:{k:"o=",n:"/"}}, +"%B|~A":{"0|d":{k:"d=",n:"d"},a:{k:["%m","d="],n:"d"},"/|q":{k:"q=",n:"q"}}}),g:{"%Z": +function(n,r){var o=[];return"+-"===r[0]||"+/-"===r[0]?o.push("\\pm "):r[0]&&o.push(r[0]),r[1]&&(o=t.j(o,t.go(r[1],"%X")),r[2]&&(r[2].match(/[,.]/)?o=t.j(o,t.go(r[2],"%X")):o.push(r[2])),r[3]=r[4]||r[3],r[3]&&(r[3]=r[3].trim(),"e"===r[3]||"*"===r[3].substr(0,1)?o.push({l:"%N"}):o.push({l:"%P"}))),r[3]&&o.push("10^{"+r[5]+"}"),o},ak: +function(n,r){var o=[];return"+-"===r[0]||"+/-"===r[0]?o.push("\\pm "):r[0]&&o.push(r[0]),o=t.j(o,t.go(r[1],"%X")),o.push("^{"+r[2]+"}"),o},"~Q": +function(n,r,t){return{l:"~Q",A:t||r}}, +"%m": +function(n,r){return{l:"%Q"}}, +"~T": +function(n,r){var o,a=t.h("%A",n.d||"");a&&""===a.t&&(n.d=a.h);var e=t.h("%A",n.q||"");e&&""===e.t&&(n.q=e.h),n.d&&(n.d=n.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),n.d=n.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),n.q?(n.d=t.go(n.d,"pu"),n.q=n.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),n.q=n.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F"),n.q=t.go(n.q,"pu"),"//"===n.o?o={l:"%S",p1:n.d,p2:n.q}:(o=n.d,o=n.d.length>1||n.q.length>1?t.j(o,{l:"%V"}):t.j(o,{l:"/"}),o=t.j(o,n.q))):o=t.go(n.d,"%R");for(var u in n)delete n[u];return o}}}, +t.c["%R"]={e:t.C({"~C":{"*":{k:"~T"}}, +"*":{"*":{k:["~T","%N"],n:"0"}}, +"@E":{"*":{k:"%c"},n:"1"},"%m":{"*":{k:["~T","%m"],n:"0"}}, +"@P|%U":{1:{k:"%U"}}, +"@h":{0:{k:"%c",n:"0"},1:{k:"%U",n:"0"}}, +"%B|~A":{"*":{k:"%c",n:"1"}}}),g:{"%N": +function(n,r){return{l:"%O"}}, +"%U": +function(n,r){n.rm+="^{"+r+"}"},"%m": +function(n,r){return{l:"ah"}}, +"~T": +function(n,r){var o;if(n.rm){var a=t.h("%A",n.rm||"");o=a&&""===a.t?t.go(a.h,"pu"):{l:"rm",p1:n.rm}}for(var e in n)delete n[e];return o}}}, +t.c["%X"]={e:t.C({"~C":{0:{k:"~U"},o:{k:"~V"}}, +",":{0:{k:["~U","~q"],n:"o"}}, +".":{0:{k:["~U","~s"],n:"o"}}, +"~A":{"*":{k:"%t"}}}),g:{"~q": +function(n,r){return{l:"~r"}}, +"~U": +function(n,r){var t=[];if(n.text.length>4){var o=n.text.length%3;0===o&&(o=3);for(var a=n.text.length-3;a>0;a-=3)t.push(n.text.substr(a,3)),t.push({l:"%W"});t.push(n.text.substr(0,o)),t.reverse()}else t.push(n.text);for(var e in n)delete n[e];return t},"~V": +function(n,r){var t=[];if(n.text.length>4){for(var o=n.text.length-3,a=0;a"===n.r||"<=>>"===n.r||"<<=>"===n.r||"<-->"===n.r?(r="\\long"+r,n.rd&&(r="\\overset{"+n.rd+"}{"+r+"}"),n.rq&&(r="\\underset{\\lower7mu{"+n.rq+"}}{"+r+"}"),r=" {}\\mathrel{"+r+"}{} "):(n.rq&&(r+="[{"+n.rq+"}]"),r+="{"+n.rd+"}",r=" {}\\mathrel{\\x"+r+"}{} "):r=" {}\\mathrel{\\long"+r+"}{} ",r},"~Q": +function(n){return o.K[n.A]}}, +J:{"->":"rightarrow","\u2192":"rightarrow","\u27f6":"rightarrow","<-":"leftarrow","<->":"leftrightarrow","<-->":"leftrightarrows","<=>":"rightleftharpoons","\u21cc":"rightleftharpoons","<=>>":"Rightleftharpoons","<<=>":"Leftrightharpoons"},I:{"-":"{-}",1:"{-}","=":"{=}",2:"{=}","#":"{\\equiv}",3:"{\\equiv}","~":"{\\tripledash}","~-":"{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}","~=":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}","~--":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}","-~-":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}","...":"{{\\cdot}{\\cdot}{\\cdot}}","....":"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}","->":"{\\rightarrow}","<-":"{\\leftarrow}","<":"{<}",">":"{>}"},L:{"%m":" ","~D":"~","%Q":"~",ah:"\\mkern3mu ","%W":"\\mkern2mu ","~r":"{,}","~n":"{{0}}\\mkern6mu ","~o":"{{0}}\\mkern3mu ","~p":"{{0}}\\mkern1mu ","~I":"\\text{-}","~~":"\\,{\\cdot}\\,","~y":"\\mkern1mu \\bullet\\mkern1mu ","@n":"{\\times}","%%":"\\prime ","%N":"\\cdot ","%O":"\\mkern1mu{\\cdot}\\mkern1mu ","%P":"\\times ","~i":"{\\sim}","^":"uparrow",v:"downarrow","~z":"\\ldots ",aa:"\\mathrm{p}K_{\\mathrm{{0}}}",Ka:"K_{\\mathrm{{0}}}",af:"\\mathrm{p}K_{\\mathrm{{0}_{{1}}}}",ag:"K_{\\mathrm{{0}_{{1}}}}","/":"/","%V":"\\,/\\,",al:"{0} "},K:{"+":" {}+{} ","-":" {}-{} ","=":" {}={} ","<":" {}<{} ",">":" {}>{} ","<<":" {}\\ll{} ",">>":" {}\\gg{} ","\\pm":" {}\\pm{} ","\\approx":" {}\\approx{} ","$\\approx$":" {}\\approx{} ",v:" \\downarrow{} ","(v)":" \\downarrow{} ","^":" \\uparrow{} ","(^)":" \\uparrow{} "},go: +function(n,r){if(!n)return n;for(var t="",o=!1,a=0;a 0) { + if (!tasks.revisit) { + input = matches.remainder; + } + if (!tasks.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } + } + // + // Prevent infinite loop + // + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }; + mhchemParser.concatNotUndefined = function(a, b) { + if (!b) { return a; } + if (!a) { return [].concat(b); } + return a.concat(b); + }; + + // + // Matching patterns + // either regexps or function that return null or {match:"a", remainder:"bc"} + // + mhchemParser.patterns = { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function (input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + if (m && m[0]) { + return { matchh: m.splice(1), remainder: input.substr(m[0].length) }; + } + return null; + }, + '(-)(9)^(-9)': function (input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + if (m && m[0]) { + return { matchh: m.splice(1), remainder: input.substr(m[0].length) }; + } + return null; + }, + 'state of aggregation $': function (input) { // or crystal system + var a = this['_findObserveGroups'](input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { return a; } // AND end of 'phrase' + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + if (m) { + return { matchh: m[0], remainder: input.substr(m[0].length) }; + } + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '\{[(': /^(?:\\\{|\[|\()/, + ')]\}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function (input) { return this['_findObserveGroups'](input, "^{", "", "", "}"); }, + '^($...$)': function (input) { return this['_findObserveGroups'](input, "^", "$", "$", ""); }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function (input) { return this['_findObserveGroups'](input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); }, + '^\\x{}': function (input) { return this['_findObserveGroups'](input, "^", /^\\[a-zA-Z]+\{/, "}", ""); }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function (input) { return this['_findObserveGroups'](input, "_{", "", "", "}"); }, + '_($...$)': function (input) { return this['_findObserveGroups'](input, "_", "$", "$", ""); }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function (input) { return this['_findObserveGroups'](input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); }, + '_\\x{}': function (input) { return this['_findObserveGroups'](input, "_", /^\\[a-zA-Z]+\{/, "}", ""); }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function (input) { return this['_findObserveGroups'](input, "", "{", "}", ""); }, + '{(...)}': function (input) { return this['_findObserveGroups'](input, "{", "", "", "}"); }, + '$...$': function (input) { return this['_findObserveGroups'](input, "", "$", "$", ""); }, + '${(...)}$': function (input) { return this['_findObserveGroups'](input, "${", "", "", "}$"); }, + '$(...)$': function (input) { return this['_findObserveGroups'](input, "$", "", "", "$"); }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function (input) { return this['_findObserveGroups'](input, "\\bond{", "", "", "}"); }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function (input) { return this['_findObserveGroups'](input, "[", "", "", "]"); }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, // \\x - but output no space before + '\\x{}{}': function (input) { return this['_findObserveGroups'](input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); }, + '\\x{}': function (input) { return this['_findObserveGroups'](input, "", /^\\[a-zA-Z]+\{/, "}", ""); }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function (input) { return this['_findObserveGroups'](input, "\\frac{", "", "", "}", "{", "", "", "}"); }, + '\\overset{(...)}': function (input) { return this['_findObserveGroups'](input, "\\overset{", "", "", "}", "{", "", "", "}"); }, + '\\underset{(...)}': function (input) { return this['_findObserveGroups'](input, "\\underset{", "", "", "}", "{", "", "", "}"); }, + '\\underbrace{(...)}': function (input) { return this['_findObserveGroups'](input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); }, + '\\color{(...)}0': function (input) { return this['_findObserveGroups'](input, "\\color{", "", "", "}"); }, + '\\color{(...)}{(...)}1': function (input) { return this['_findObserveGroups'](input, "\\color{", "", "", "}", "{", "", "", "}"); }, + '\\color(...){(...)}2': function (input) { return this['_findObserveGroups'](input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); }, + '\\ce{(...)}': function (input) { return this['_findObserveGroups'](input, "\\ce{", "", "", "}"); }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function (input) { + var matchh; + // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + matchh = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + if (matchh) { + return { matchh: matchh[0], remainder: input.substr(matchh[0].length) }; + } + var a = this['_findObserveGroups'](input, "", "$", "$", ""); + if (a) { // e.g. $2n-1$, $-$ + matchh = a.matchh.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + if (matchh) { + return { matchh: matchh[0], remainder: input.substr(matchh[0].length) }; + } + } + return null; + }, + 'amount2': function (input) { return this['amount'](input); }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function (input) { + if (input.match(/^\([a-z]+\)$/)) { return null; } // state of aggregation = no formula + var matchh = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + if (matchh) { + return { matchh: matchh[0], remainder: input.substr(matchh[0].length) }; + } + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + 'pK(a)': /^pK([abw]|eq|sp)(?=$|[^a-zA-Z0-9])/, // acid/base dissociation constant, freezing/boiling-point depression, ionic product for water, equilibrium constants + 'pK_(a)': /^pK_([abw])/, + 'pK_{(a)}': /^pK_{([abw]|eq|sp)}/, + 'pK(a1)': /^pK([ab])([123])(?=$|[^a-zA-Z0-9])/, + 'pK_{(a1)}': /^pK_{([ab])([123])}/, + 'K(a)': /^K([abwfcp]|eq|sp)(?=$|[^a-zA-Z0-9])/, + 'K_(a)': /^K_([abwfcpCP])/, + 'K_{(a)}': /^K_{([abwfcpCP]|eq|sp)}/, + 'K(a1)': /^K([ab])([123])(?=$|[^a-zA-Z0-9])/, + 'K_{(a1)}': /^K_{([ab])([123])}/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*\*\s*/, + '_findObserveGroups': function (input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + var matchh = this['__match'](input, begExcl); + if (matchh === null) { return null; } + input = input.substr(matchh.length); + matchh = this['__match'](input, begIncl); + if (matchh === null) { return null; } + var e = this['__findObserveGroups'](input, matchh.length, endIncl || endExcl); + if (e === null) { return null; } + var match1 = input.substring(0, (endIncl ? e.endMatchEnd : e.endMatchBegin)); + if (!(beg2Excl || beg2Incl)) { + return { + matchh: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this['_findObserveGroups'](input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + if (group2 === null) { return null; } + var matchRet = [match1, group2.matchh]; + if (combine) { matchRet = matchRet.join(""); } + return { + matchh: matchRet, + remainder: group2.remainder + }; + } + }, + '__match': function (input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { return null; } + return pattern; + } else { + var matchh = input.match(pattern); + if (!matchh) { return null; } + return matchh[0]; + } + }, + '__findObserveGroups': function (input, i, endChars) { + var braces = 0; + while (i < input.length) { + var a = input.charAt(i); + var matchh = this['__match'](input.substr(i), endChars); + if (matchh !== null && braces === 0) { + return { endMatchBegin: i, endMatchEnd: i + matchh.length }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + i++; + } + if (braces > 0) { + return null; + } + return null; + } + }; + + // + // Matching function + // e.g. matchh("a", input) will look for the regexp called "a" and see if it matches + // returns null or {matchh:"a", remainder:"bc"} + // + mhchemParser.matchh = function (m, input) { + var pattern = mhchemParser.patterns[m]; + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { // RegExp + var matchh = input.match(pattern); + if (matchh) { + var mm; + if (matchh[2]) { + mm = [ matchh[1], matchh[2] ]; + } else if (matchh[1]) { + mm = matchh[1]; + } else { + mm = matchh[0]; + } + return { matchh: mm, remainder: input.substr(matchh[0].length) }; + } + return null; + } + }; + + // + // Generic state machine actions + // + mhchemParser.actions = { + 'a=': function (buffer, m) { buffer.a = (buffer.a || "") + m; }, + 'b=': function (buffer, m) { buffer.b = (buffer.b || "") + m; }, + 'p=': function (buffer, m) { buffer.p = (buffer.p || "") + m; }, + 'o=': function (buffer, m) { buffer.o = (buffer.o || "") + m; }, + 'q=': function (buffer, m) { buffer.q = (buffer.q || "") + m; }, + 'd=': function (buffer, m) { buffer.d = (buffer.d || "") + m; }, + 'rm=': function (buffer, m) { buffer.rm = (buffer.rm || "") + m; }, + 'text=': function (buffer, m) { buffer.text = (buffer.text || "") + m; }, + 'insert': function (buffer, m, a) { return { type: a }; }, + 'insert+p1': function (buffer, m, a) { return { type: a, p1: m }; }, + 'insert+p1+p2': function (buffer, m, a) { return { type: a, p1: m[0], p2: m[1] }; }, + 'copy': function (buffer, m) { return m; }, + 'rm': function (buffer, m) { return { type: 'rm', p1: m }; }, + 'text': function (buffer, m) { return mhchemParser.go(m, 'text'); }, + '{text}': function (buffer, m) { + var ret = [ "{" ]; + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.go(m, 'text')); + ret = mhchemParser.concatNotUndefined(ret, "}"); + return ret; + }, + 'tex-math': function (buffer, m) { return mhchemParser.go(m, 'tex-math'); }, + 'tex-math tight': function (buffer, m) { return mhchemParser.go(m, 'tex-math tight'); }, + 'bond': function (buffer, m, k) { return { type: 'bond', kind: k || m }; }, + 'color0-output': function (buffer, m) { return { type: 'color0', color: m[0] }; }, + 'ce': function (buffer, m) { return mhchemParser.go(m); }, + '1/2': function (buffer, m) { + var ret; + if (m.match(/^[+\-]/)) { + ret = [ m.substr(0, 1) ]; + m = m.substr(1); + } + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret = mhchemParser.concatNotUndefined(ret, { type: 'frac', p1: n[1], p2: n[2] } ); + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret = mhchemParser.concatNotUndefined(ret, { type: 'tex-math', p1: n[3] } ); + } + return ret; + }, + '9,9': function (buffer, m) { return mhchemParser.go(m, '9,9'); } + }; + + // + // State machine definitions + // + mhchemParser.stateMachines = {}; + // + // convert { 'a': { '*': { action: 'output' } } } to [ { matchh: 'a', actions: { '*': { action: 'output' } } } ] + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + mhchemParser.createTransitions = function (o) { + var a, b, s, i; + // + // 1. o ==> oo, expanding 'a|b' + // + var oo = {}; + for (a in o) { + if (a.indexOf("|") !== -1) { + s = a.split("|"); + for (i=0; i transition array + // + var transitions = []; + for (a in oo) { + var actions = {}; + var ooa = oo[a]; + for (b in ooa) { + // + // expanding action-state:'a|b' if needed + // + if (b.indexOf("|") !== -1) { + s = b.split("|"); + for (i=0; i': { + '0|1|2|3': { action: 'r=', nextState: 'r' }, + 'a|as': { action: [ 'output', 'r=' ], nextState: 'r' }, + '*': { action: [ 'output', 'r=' ], nextState: 'r' } }, + '+': { + 'o': { action: 'd= kv', nextState: 'd' }, + 'd|D': { action: 'd=', nextState: 'd' }, + 'q': { action: 'd=', nextState: 'qd' }, + 'qd|qD': { action: 'd=', nextState: 'qd' }, + 'dq': { action: [ 'output', 'd=' ], nextState: 'd' }, + '3': { action: [ 'sb=false', 'output', 'operator' ], nextState: '0' } }, + 'amount': { + '0|2': { action: 'a=', nextState: 'a' } }, + 'pm-operator': { + '0|1|2|a|as': { action: [ 'sb=false', 'output', { type: 'operator', option: '\\pm' } ], nextState: '0' } }, + 'operator': { + '0|1|2|a|as': { action: [ 'sb=false', 'output', 'operator' ], nextState: '0' } }, + '-$': { + 'o|q': { action: [ 'charge or bond', 'output' ], nextState: 'qd' }, + 'd': { action: 'd=', nextState: 'd' }, + 'D': { action: [ 'output', { type: 'bond', option: "-" } ], nextState: '3' }, + 'q': { action: 'd=', nextState: 'qd' }, + 'qd': { action: 'd=', nextState: 'qd' }, + 'qD|dq': { action: [ 'output', { type: 'bond', option: "-" } ], nextState: '3' } }, + '-9': { + '3|o': { action: [ 'output', { type: 'insert', option: 'hyphen' } ], nextState: '3' } }, + '- orbital overlap': { + 'o': { action: { type: '- after o', option: true }, nextState: '2' }, + 'd': { action: { type: '- after d', option: true }, nextState: '2' } }, + '-': { + '0|1|2': { action: [ { type: 'output', option: 1 }, 'beginsWithBond=true', { type: 'bond', option: "-" } ], nextState: '3' }, + '3': { action: { type: 'bond', option: "-" } }, + 'a': { action: [ 'output', { type: 'insert', option: 'hyphen' } ], nextState: '2' }, + 'as': { action: [ { type: 'output', option: 2 }, { type: 'bond', option: "-" } ], nextState: '3' }, + 'b': { action: 'b=' }, + 'o': { action: '- after o', nextState: '2' }, + 'q': { action: '- after o', nextState: '2' }, + 'd|qd|dq': { action: '- after d', nextState: '2' }, + 'D|qD|p': { action: [ 'output', { type: 'bond', option: "-" } ], nextState: '3' } }, + 'amount2': { + '1|3': { action: 'a=', nextState: 'a' } }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { action: 'o=', nextState: 'o' }, + 'q|dq': { action: ['output', 'o='], nextState: 'o' }, + 'd|D|qd|qD': { action: 'o after d', nextState: 'o' } }, + 'digits': { + 'o': { action: 'q=', nextState: 'q' }, + 'd|D': { action: 'q=', nextState: 'dq' }, + 'q': { action: [ 'output', 'o=' ], nextState: 'o' }, + 'a': { action: 'o=', nextState: 'o' } }, + 'space A': { + 'b|p|bp': {} }, + 'space': { + 'a': { nextState: 'as' }, + '0': { action: 'sb=false' }, + '1|2': { action: 'sb=true' }, + 'r|rt|rd|rdt|rdq': { action: 'output', nextState: '0' }, + '*': { action: [ 'output', 'sb=true' ], nextState: '1'} }, + '1st-level escape': { + '1|2': { action: [ 'output', { type: 'insert+p1', option: '1st-level escape' } ] }, + '*': { action: [ 'output', { type: 'insert+p1', option: '1st-level escape' } ], nextState: '0' } }, + '[(...)]': { + 'r|rt': { action: 'rd=', nextState: 'rd' }, + 'rd|rdt': { action: 'rq=', nextState: 'rdq' } }, + '...': { + 'o|d|D|dq|qd|qD': { action: [ 'output', { type: 'bond', option: "..." } ], nextState: '3' }, + '*': { action: [ { type: 'output', option: 1 }, { type: 'insert', option: 'ellipsis' } ], nextState: '1' } }, + '. |* ': { + '*': { action: [ 'output', { type: 'insert', option: 'addition compound' } ], nextState: '1' } }, + 'state of aggregation $': { + '*': { action: [ 'output', 'state of aggregation' ], nextState: '1' } }, + '\{[(': { + 'a|as|o': { action: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' }, + '0|1|2|3': { action: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' }, + '*': { action: [ 'output', 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' } }, + ')]\}': { + '0|1|2|3|b|p|bp|o': { action: [ 'o=', 'parenthesisLevel--' ], nextState: 'o' }, + 'a|as|d|D|q|qd|qD|dq': { action: [ 'output', 'o=', 'parenthesisLevel--' ], nextState: 'o' } }, + ', ': { + '*': { action: [ 'output', 'comma' ], nextState: '0' } }, + '^_': { // ^ and _ without a sensible argument + '*': { } }, + '^{(...)}|^($...$)': { + '0|1|2|as': { action: 'b=', nextState: 'b' }, + 'p': { action: 'b=', nextState: 'bp' }, + '3|o': { action: 'd= kv', nextState: 'D' }, + 'q': { action: 'd=', nextState: 'qD' }, + 'd|D|qd|qD|dq': { action: [ 'output', 'd=' ], nextState: 'D' } }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { action: 'b=', nextState: 'b' }, + 'p': { action: 'b=', nextState: 'bp' }, + '3|o': { action: 'd= kv', nextState: 'd' }, + 'q': { action: 'd=', nextState: 'qd' }, + 'd|qd|D|qD': { action: 'd=' }, + 'dq': { action: [ 'output', 'd=' ], nextState: 'd' } }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { action: [ 'output', 'q=' ], nextState: 'q' } }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { action: 'p=', nextState: 'p' }, + 'b': { action: 'p=', nextState: 'bp' }, + '3|o': { action: 'q=', nextState: 'q' }, + 'd|D': { action: 'q=', nextState: 'dq' }, + 'q|qd|qD|dq': { action: [ 'output', 'q=' ], nextState: 'q' } }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { action: [ { type: 'output', option: 2 }, 'bond' ], nextState: '3' } }, + '#': { + '0|1|2|3|a|as|o': { action: [ { type: 'output', option: 2 }, { type: 'bond', option: "#" } ], nextState: '3' } }, + '{}': { + '*': { action: { type: 'output', option: 1 }, nextState: '1' } }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { action: 'o=', nextState: 'o' }, + 'o|d|D|q|qd|qD|dq': { action: [ 'output', 'o=' ], nextState: 'o' } }, + '$...$': { + 'a': { action: 'a=' }, // 2$n$ + '0|1|2|3|as|b|p|bp|o': { action: 'o=', nextState: 'o' }, // not 'amount' + 'as|o': { action: 'o=' }, + 'q|d|D|qd|qD|dq': { action: [ 'output', 'o=' ], nextState: 'o' } }, + '\\bond{(...)}': { + '*': { action: [ { type: 'output', option: 2 }, 'bond' ], nextState: "3" } }, + '\\frac{(...)}': { + '*': { action: [ { type: 'output', option: 1 }, 'frac-output' ], nextState: '3' } }, + '\\overset{(...)}': { + '*': { action: [ { type: 'output', option: 2 }, 'overset-output' ], nextState: '3' } }, + '\\underset{(...)}': { + '*': { action: [ { type: 'output', option: 2 }, 'underset-output' ], nextState: '3' } }, + '\\underbrace{(...)}': { + '*': { action: [ { type: 'output', option: 2 }, 'underbrace-output' ], nextState: '3' } }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { action: [ { type: 'output', option: 2 }, 'color-output' ], nextState: '3' } }, + '\\color{(...)}0': { + '*': { action: [ { type: 'output', option: 2 }, 'color0-output' ] } }, + '\\ce{(...)}': { + '*': { action: [ { type: 'output', option: 2 }, 'ce' ], nextState: '3' } }, + '\\,': { + '*': { action: [ { type: 'output', option: 1 }, 'copy' ], nextState: '1' } }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { action: [ 'o=', 'output' ], nextState: '3' }, + '*': { action: ['output', 'o=', 'output' ], nextState: '3' } }, + 'others': { + '*': { action: [ { type: 'output', option: 1 }, 'copy' ], nextState: '3' } }, + 'else2': { + 'a': { action: 'a to o', nextState: 'o', revisit: true }, + 'as': { action: [ { type: 'output' }, 'sb=true' ], nextState: '1', revisit: true }, + 'r|rt|rd|rdt|rdq': { action: [ 'output' ], nextState: '0', revisit: true }, + '*': { action: [ 'output', 'copy' ], nextState: '3' } } + }), + actions: { + 'o after d': function (buffer, m) { + var ret; + if (buffer.d.match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function (buffer, m) { + buffer.d = m; + buffer['d-type'] = 'kv'; + }, + 'charge or bond': function (buffer, m) { + if (buffer['beginsWithBond']) { + var ret = mhchemParser.concatNotUndefined(ret, this['output'](buffer)); + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o': function (buffer, m, isOrbitalOverlap) { + var hyphenFollows = isOrbitalOverlap || this['_hyphenFollows'](buffer, m); + var ret = mhchemParser.concatNotUndefined(null, this['output'](buffer, m)); + if (hyphenFollows) { + ret = mhchemParser.concatNotUndefined(ret, { type: 'hyphen' }); + } else { + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + return ret; + }, + '- after d': function (buffer, m, isOrbitalOverlap) { + var hyphenFollows = isOrbitalOverlap || this['_hyphenFollows'](buffer, m); + var ret; + if (hyphenFollows) { + ret = mhchemParser.concatNotUndefined(ret, this['output'](buffer, m)); + ret = mhchemParser.concatNotUndefined(ret, { type: 'hyphen' }); + } else { + var c1 = mhchemParser.matchh('digits', buffer.d || ""); + if (c1 && c1.remainder==='') { + ret = mhchemParser.concatNotUndefined(null, mhchemParser.actions['d='](buffer, m)); + ret = mhchemParser.concatNotUndefined(ret, this['output'](buffer)); + } else { + ret = mhchemParser.concatNotUndefined(ret, this['output'](buffer, m)); + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + return ret; + }, + '_hyphenFollows': function (buffer, m) { + var c1 = mhchemParser.matchh('orbital', buffer.o || ""); + var c2 = mhchemParser.matchh('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.matchh('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.matchh('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m==="-" && ( c1 && c1.remainder==='' || c2 || c3 || c4 ); + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + return hyphenFollows; + }, + 'a to o': function (buffer, m) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function (buffer, m) { buffer.sb = true; }, + 'sb=false': function (buffer, m) { buffer.sb = false; }, + 'beginsWithBond=true': function (buffer, m) { buffer.beginsWithBond = true; }, + 'beginsWithBond=false': function (buffer, m) { buffer.beginsWithBond = false; }, + 'parenthesisLevel++': function (buffer, m) { buffer.parenthesisLevel++; }, + 'parenthesisLevel--': function (buffer, m) { buffer.parenthesisLevel--; }, + 'state of aggregation': function (buffer, m) { + m = mhchemParser.go(m, 'o'); + return { type: 'state of aggregation', p1: m }; + }, + 'comma': function (buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = (a !== m); + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { type: 'comma enumeration L', p1: a }; + } else { + return { type: 'comma enumeration M', p1: a }; + } + }, + 'output': function (buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + var ret; + if (!buffer.r) { + ret = []; + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) { + ret = null; + } else { + if (buffer.sb) { + ret.push({ type: 'entitySkip' }); + } + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows!==2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer['d-type']==='kv' && mhchemParser.matchh('d-oxidation$', buffer.d || "")) { + buffer['d-type'] = 'oxidation'; + } else if (buffer.o && buffer['d-type']==='kv' && !buffer.q) { + buffer['d-type'] = undefined; + } + } + buffer.a = mhchemParser.go(buffer.a, 'a'); + buffer.b = mhchemParser.go(buffer.b, 'bd'); + buffer.p = mhchemParser.go(buffer.p, 'pq'); + buffer.o = mhchemParser.go(buffer.o, 'o'); + if (buffer['d-type'] === 'oxidation') { + buffer.d = mhchemParser.go(buffer.d, 'oxidation'); + } else { + buffer.d = mhchemParser.go(buffer.d, 'bd'); + } + buffer.q = mhchemParser.go(buffer.q, 'pq'); + ret.push({ + type: 'chemfive', + a: buffer.a, + b: buffer.b, + p: buffer.p, + o: buffer.o, + q: buffer.q, + d: buffer.d, + 'd-type': buffer['d-type'] + }); + } + } else { // r + if (buffer.rdt === 'M') { + buffer.rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + buffer.rd = [ { type: 'text', p1: buffer.rd } ]; + } else { + buffer.rd = mhchemParser.go(buffer.rd); + } + if (buffer.rqt === 'M') { + buffer.rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + buffer.rq = [ { type: 'text', p1: buffer.rq } ]; + } else { + buffer.rq = mhchemParser.go(buffer.rq); + } + ret = { + type: 'arrow', + r: buffer.r, + rd: buffer.rd, + rq: buffer.rq + }; + } + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + return ret; + }, + 'oxidation-output': function (buffer, m) { + var ret = [ "{" ]; + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.go(m, 'oxidation')); + ret = ret.concat([ "}" ]); + return ret; + }, + 'frac-output': function (buffer, m) { + return { type: 'frac-ce', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) }; + }, + 'overset-output': function (buffer, m) { + return { type: 'overset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) }; + }, + 'underset-output': function (buffer, m) { + return { type: 'underset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) }; + }, + 'underbrace-output': function (buffer, m) { + return { type: 'underbrace', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) }; + }, + 'color-output': function (buffer, m) { + return { type: 'color', color1: m[0], color2: mhchemParser.go(m[1]) }; + }, + 'r=': function (buffer, m) { buffer.r = (buffer.r || "") + m; }, + 'rdt=': function (buffer, m) { buffer.rdt = (buffer.rdt || "") + m; }, + 'rd=': function (buffer, m) { buffer.rd = (buffer.rd || "") + m; }, + 'rqt=': function (buffer, m) { buffer.rqt = (buffer.rqt || "") + m; }, + 'rq=': function (buffer, m) { buffer.rq = (buffer.rq || "") + m; }, + 'operator': function (buffer, m, p1) { return { type: 'operator', kind: (p1 || m) }; } + } + }; + // + // Transitions and actions of a parser + // + mhchemParser.stateMachines['a'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + '1/2$': { + '0': { action: '1/2' } }, + 'else': { + '0': { nextState: '1', revisit: true } }, + '$(...)$': { + '*': { action: 'tex-math tight', nextState: '1' } }, + ',': { + '*': { action: { type: 'insert', option: 'commaDecimal' } } }, + 'else2': { + '*': { action: 'copy' } } + }), + actions: {} + }; + // + // Transitions and actions of o parser + // + mhchemParser.stateMachines['o'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + '1/2$': { + '0': { action: '1/2' } }, + 'else': { + '0': { nextState: '1', revisit: true } }, + 'letters': { + '*': { action: 'rm' } }, + '\\ca': { + '*': { action: { type: 'insert', option: 'circa' } } }, + '\\x{}{}|\\x{}|\\x': { + '*': { action: 'copy' } }, + '${(...)}$|$(...)$': { + '*': { action: 'tex-math' } }, + '{(...)}': { + '*': { action: '{text}' } }, + 'else2': { + '*': { action: 'copy' } } + }), + actions: {} + }; + // + // Transitions and actions of text parser + // + mhchemParser.stateMachines['text'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { action: 'output' } }, + '{...}': { + '*': { action: 'text=' } }, + '${(...)}$|$(...)$': { + '*': { action: 'tex-math' } }, + '\\greek': { + '*': { action: [ 'output', 'rm' ] } }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { action: [ 'output', 'copy' ] } }, + 'else': { + '*': { action: 'text=' } } + }), + actions: { + 'output': function (buffer, m) { + if (buffer.text) { + var ret = { type: 'text', p1: buffer.text }; + for (var p in buffer) { delete buffer[p]; } + return ret; + } + return null; + } + } + }; + // + // Transitions and actions of pq parser + // + mhchemParser.stateMachines['pq'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + 'state of aggregation $': { + '*': { action: 'state of aggregation' } }, + 'i$': { + '0': { nextState: '!f', revisit: true } }, + '(KV letters),': { + '0': { action: 'rm', nextState: '0' } }, + 'formula$': { + '0': { nextState: 'f', revisit: true } }, + '1/2$': { + '0': { action: '1/2' } }, + 'else': { + '0': { nextState: '!f', revisit: true } }, + '${(...)}$|$(...)$': { + '*': { action: 'tex-math' } }, + '{(...)}': { + '*': { action: 'text' } }, + 'a-z': { + 'f': { action: 'tex-math' } }, + 'letters': { + '*': { action: 'rm' } }, + '-9.,9': { + '*': { action: '9,9' } }, + ',': { + '*': { action: { type: 'insert+p1', option: 'comma enumeration S' } } }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { action: 'color-output' } }, + '\\color{(...)}0': { + '*': { action: 'color0-output' } }, + '\\ce{(...)}': { + '*': { action: 'ce' } }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { action: 'copy' } }, + 'else2': { + '*': { action: 'copy' } } + }), + actions: { + 'state of aggregation': function (buffer, m) { + m = mhchemParser.go(m, 'o'); + return { type: 'state of aggregation subscript', p1: m }; + }, + 'color-output': function (buffer, m) { + return { type: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'pq') }; + } + } + }; + // + // Transitions and actions of bd parser + // + mhchemParser.stateMachines['bd'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + 'x$': { + '0': { nextState: '!f', revisit: true } }, + 'formula$': { + '0': { nextState: 'f', revisit: true } }, + 'else': { + '0': { nextState: '!f', revisit: true } }, + '-9.,9 no missing 0': { + '*': { action: '9,9' } }, + '.': { + '*': { action: { type: 'insert', option: 'electron dot' } } }, + 'a-z': { + 'f': { action: 'tex-math' } }, + 'x': { + '*': { action: { type: 'insert', option: 'KV x' } } }, + 'letters': { + '*': { action: 'rm' } }, + '\'': { + '*': { action: { type: 'insert', option: 'prime' } } }, + '${(...)}$|$(...)$': { + '*': { action: 'tex-math' } }, + '{(...)}': { + '*': { action: 'text' } }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { action: 'color-output' } }, + '\\color{(...)}0': { + '*': { action: 'color0-output' } }, + '\\ce{(...)}': { + '*': { action: 'ce' } }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { action: 'copy' } }, + 'else2': { + '*': { action: 'copy' } } + }), + actions: { + 'color-output': function (buffer, m) { + return { type: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'bd') }; + } + } + }; + // + // Transitions and actions of oxidation parser + // + mhchemParser.stateMachines['oxidation'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + 'roman numeral': { + '*': { action: 'roman-numeral' } }, + '${(...)}$|$(...)$': { + '*': { action: 'tex-math' } }, + 'else': { + '*': { action: 'copy' } } + }), + actions: { + 'roman-numeral': function (buffer, m) { return { type: 'roman numeral', p1: m }; } + } + }; + // + // Transitions and actions of tex-math parser + // + mhchemParser.stateMachines['tex-math'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { action: 'output' } }, + '\\ce{(...)}': { + '*': { action: [ 'output', 'ce' ] } }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { action: 'o=' } }, + 'else': { + '*': { action: 'o=' } } + }), + actions: { + 'output': function (buffer, m) { + if (buffer.o) { + var ret = { type: 'tex-math', p1: buffer.o }; + for (var p in buffer) { delete buffer[p]; } + return ret; + } + return null; + } + } + }; + // + // Transitions and actions of tex-math-tight parser + // + mhchemParser.stateMachines['tex-math tight'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { action: 'output' } }, + '\\ce{(...)}': { + '*': { action: [ 'output', 'ce' ] } }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { action: 'o=' } }, + '-|+': { + '*': { action: 'tight operator' } }, + 'else': { + '*': { action: 'o=' } } + }), + actions: { + 'tight operator': function (buffer, m) { buffer.o = (buffer.o || "") + "{"+m+"}"; }, + 'output': function (buffer, m) { + if (buffer.o) { + var ret = { type: 'tex-math', p1: buffer.o }; + for (var p in buffer) { delete buffer[p]; } + return ret; + } + return null; + } + } + }; + // + // Transitions and actions of 9,9 parser + // + mhchemParser.stateMachines['9,9'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} }, + ',': { + '*': { action: 'comma' } }, + 'else': { + '*': { action: 'copy' } } + }), + actions: { + 'comma': function (buffer, m) { return { type: 'commaDecimal' }; } + } + }; + // + // + // \pu state machines + // + // + // Transitions and actions of pu main parser + // + mhchemParser.stateMachines['pu'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { action: 'output' } }, + '\{[(|)]\}': { + '0|a': { action: 'copy' } }, + '(-)(9)^(-9)': { + '0': { action: 'number^', nextState: 'a' } }, + '(-)(9.,9)(e)(99)': { + '0': { action: 'enumber', nextState: 'a' } }, + 'space': { + '0|a': {} }, + 'pm-operator': { + '0|a': { action: { type: 'operator', option: '\\pm' }, nextState: '0' } }, + 'operator': { + '0|a': { action: 'copy', nextState: '0' } }, + '//': { + 'd': { action: 'o=', nextState: '/' } }, + '/': { + 'd': { action: 'o=', nextState: '/' } }, + '{...}|else': { + '0|d': { action: 'd=', nextState: 'd' }, + 'a': { action: [ 'space', 'd=' ], nextState: 'd' }, + '/|q': { action: 'q=', nextState: 'q' } } + }), + actions: { + 'enumber': function (buffer, m) { + var ret = []; + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + if (m[1]) { + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.go(m[1], 'pu-9,9')); + if (m[2]) { + if (m[2].match(/[,.]/)) { + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + m[3] = m[4] || m[3]; + if (m[3]) { + m[3] = m[3].trim(); + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ type: 'cdot' }); + } else { + ret.push({ type: 'times' }); + } + } + } + if (m[3]) { + ret.push("10^{"+m[5]+"}"); + } + return ret; + }, + 'number^': function (buffer, m) { + var ret = []; + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + ret = mhchemParser.concatNotUndefined(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{"+m[2]+"}"); + return ret; + }, + 'operator': function (buffer, m, p1) { return { type: 'operator', kind: (p1 || m) }; }, + 'space': function (buffer, m) { return { type: 'pu-space-1' }; }, + 'output': function (buffer, m) { + var ret; + var md = mhchemParser.matchh('{(...)}', buffer.d || ""); + if (md && md.remainder === '') { buffer.d = md.matchh; } + var mq = mhchemParser.matchh('{(...)}', buffer.q || ""); + if (mq && mq.remainder === '') { buffer.q = mq.matchh; } + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + if (buffer.q) { // fraction + buffer.d = mhchemParser.go(buffer.d, 'pu'); + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + buffer.q = mhchemParser.go(buffer.q, 'pu'); + if (buffer.o === '//') { + ret = { type: 'pu-frac', p1: buffer.d, p2: buffer.q }; + } else { + ret = buffer.d; + if (buffer.d.length > 1 || buffer.q.length > 1) { + ret = mhchemParser.concatNotUndefined(ret, { type: ' / ' }); + } else { + ret = mhchemParser.concatNotUndefined(ret, { type: '/' }); + } + ret = mhchemParser.concatNotUndefined(ret, buffer.q); + } + } else { // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + for (var p in buffer) { delete buffer[p]; } + return ret; + } + } + }; + // + // Transitions and actions of pu-2 parser + // + mhchemParser.stateMachines['pu-2'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { action: 'output' } }, + '*': { + '*': { action: [ 'output', 'cdot' ], nextState: '0' } }, + '\\x': { + '*': { action: 'rm=' }, nextState: '1' }, + 'space': { + '*': { action: [ 'output', 'space' ], nextState: '0' } }, + '^{(...)}|^(-1)': { + '1': { action: '^(-1)' } }, + '-9.,9': { + '0': { action: 'rm=', nextState: '0' }, + '1': { action: '^(-1)', nextState: '0' } }, + '{...}|else': { + '*': { action: 'rm=', nextState: '1' } } + }), + actions: { + 'cdot': function (buffer, m) { return { type: 'tight cdot' }; }, + '^(-1)': function (buffer, m) { buffer.rm += "^{"+m+"}"; }, + 'space': function (buffer, m) { return { type: 'pu-space-2' }; }, + 'output': function (buffer, m) { + var ret; + if (buffer.rm) { + var mrm = mhchemParser.matchh('{(...)}', buffer.rm || ""); + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.matchh, 'pu'); + } else { + ret = { type: 'rm', p1: buffer.rm }; + } + } + for (var p in buffer) { delete buffer[p]; } + return ret; + } + } + }; + // + // Transitions and actions of 9,9 parser + // + mhchemParser.stateMachines['pu-9,9'] = { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { action: 'output-0' }, + 'o': { action: 'output-o' } }, + ',': { + '0': { action: [ 'output-0', 'comma' ], nextState: 'o' } }, + '.': { + '0': { action: [ 'output-0', 'copy' ], nextState: 'o' } }, + 'else': { + '*': { action: 'text=' } } + }), + actions: { + 'comma': function (buffer, m) { return { type: 'commaDecimal' }; }, + 'output-0': function (buffer, m) { + var ret = []; + if (buffer.text.length > 4) { + var a = buffer.text.length % 3; + if (a === 0) { a = 3; } + for (var i=buffer.text.length-3; i>0; i-=3) { + ret.push(buffer.text.substr(i, 3)); + ret.push({ type: '1000 separator' }); + } + ret.push(buffer.text.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text); + } + for (var p in buffer) { delete buffer[p]; } + return ret; + }, + 'output-o': function (buffer, m) { + var ret = []; + if (buffer.text.length > 4) { + var a = buffer.text.length - 3; + for (var i=0; i" || buf.r === "<=>>" || buf.r === "<<=>" || buf.r === "<-->") { + // arrows that cannot stretch correctly yet, https://github.com/mathjax/MathJax/issues/1491 + arrow = "\\long"+arrow; + if (buf.rd) { arrow = "\\overset{"+buf.rd+"}{"+arrow+"}"; } + if (buf.rq) { arrow = "\\underset{\\lower7mu{"+buf.rq+"}}{"+arrow+"}"; } + arrow = " {}\\mathrel{"+arrow+"}{} "; + } else { + if (buf.rq) { arrow += "[{"+buf.rq+"}]"; } + arrow += "{"+buf.rd+"}"; + arrow = " {}\\mathrel{\\x"+arrow+"}{} "; + } + } else { + arrow = " {}\\mathrel{\\long"+arrow+"}{} "; + } + return arrow; + }, + 'operator': function (buf) { return texify.operators[buf.kind]; } + }, + arrows: { + "->": "rightarrow", + "\u2192": "rightarrow", + "\u27F6": "rightarrow", + "<-": "leftarrow", + "<->": "leftrightarrow", + "<-->": "leftrightarrows", + "<=>": "rightleftharpoons", + "\u21CC": "rightleftharpoons", + "<=>>": "Rightleftharpoons", + "<<=>": "Leftrightharpoons" + }, + bonds: { + "-": "{-}", + "1": "{-}", + "=": "{=}", + "2": "{=}", + "#": "{\\equiv}", + "3": "{\\equiv}", + "~": "{\\tripledash}", + "~-": "{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}", + "~=": "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}", + "~--": "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}", + "-~-": "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}", + "...": "{{\\cdot}{\\cdot}{\\cdot}}", + "....": "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}", + "->": "{\\rightarrow}", + "<-": "{\\leftarrow}", + "<": "{<}", + ">": "{>}" + }, + entities: { + 'space': " ", + 'entitySkip': "~", + 'pu-space-1': "~", + 'pu-space-2': "\\mkern3mu ", + '1000 separator': "\\mkern2mu ", + 'commaDecimal': "{,}", + 'comma enumeration L': "{{0}}\\mkern6mu ", + 'comma enumeration M': "{{0}}\\mkern3mu ", + 'comma enumeration S': "{{0}}\\mkern1mu ", + 'hyphen': "\\text{-}", + 'addition compound': "\\,{\\cdot}\\,", + 'electron dot': "\\mkern1mu \\bullet\\mkern1mu ", + 'KV x': "{\\times}", + 'prime': "\\prime ", + 'cdot': "\\cdot ", + 'tight cdot': "\\mkern1mu{\\cdot}\\mkern1mu ", + 'times': "\\times ", + 'circa': "{\\sim}", + '^': "uparrow", + 'v': "downarrow", + 'ellipsis': "\\ldots ", + 'pKa': "\\mathrm{p}K_{\\mathrm{{0}}}", + 'Ka': "K_{\\mathrm{{0}}}", + 'pKa1': "\\mathrm{p}K_{\\mathrm{{0}_{{1}}}}", + 'Ka1': "K_{\\mathrm{{0}_{{1}}}}", + '/': "/", + ' / ': "\\,/\\,", + '1st-level escape': "{0} " // &, \\\\, \\hline + }, + operators: { + "+": " {}+{} ", + "-": " {}-{} ", + "=": " {}={} ", + "<": " {}<{} ", + ">": " {}>{} ", + "<<": " {}\\ll{} ", + ">>": " {}\\gg{} ", + "\\pm": " {}\\pm{} ", + "\\approx": " {}\\approx{} ", + "$\\approx$": " {}\\approx{} ", + "v": " \\downarrow{} ", + "(v)": " \\downarrow{} ", + "^": " \\uparrow{} ", + "(^)": " \\uparrow{} " + }, + + go: function (input, isInner) { + if (!input) { return input; } + var res = ""; + var cee = false; + for (var i=0; i Date: Mon, 10 Apr 2017 16:15:02 -0400 Subject: [PATCH 03/16] Add CDN-latest.js for loading the latest copy from a cdn without knowing the version. --- unpacked/CDN-latest.js | 129 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 unpacked/CDN-latest.js diff --git a/unpacked/CDN-latest.js b/unpacked/CDN-latest.js new file mode 100644 index 000000000..a946b06c0 --- /dev/null +++ b/unpacked/CDN-latest.js @@ -0,0 +1,129 @@ +(function () { + + var CDN = { + 'cdnjs.cloudflare.com': { + api: 'https://api.cdnjs.com/libraries/mathjax?fields=version', + version: 'version', + mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/' + }, + + 'cdn.rawgit.com': { + api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest', + version: 'tag_name', + mathjax: 'https://cdn.rawgit.com/mathjax/MathJax/' + }, + + 'cdn.jsdelivr.net': { + api: 'https://api.jsdelivr.com/v1/jsdelivr/libraries?name=mathjax&lastversion=*', + version: 'lastversion', + mathjax: 'https://cdn.jsdelivr.net/mathjax/' + } + }; + + function Error(message) { + if (console && console.log) console.log(message); + } + + function getScript() { + if (document.currentScript) return document.currentScript; + var scripts = document.getElementsByTagName("script"); + for (var i = 0, m = scripts.length; i < m; i++) { + var script = scripts[i]; + for (var cdn in CDN) {if (CDN.hasOwnProperty(cdn)) { + var url = CDN[cdn].mathjax; + if (script.src && script.src.substr(0,url.length) === url) return script; + }} + } + } + + function getCDN(script) { + if (!script) return; + var cdn = script.src.replace(/https:\/\//,'').replace(/[\/\?].*/,''); + return CDN[cdn]; + } + + var cookiePattern = /(?:^|;\s*)mjx\.latest=([^;]*)(?:;|$)/; + function getVersion() { + var match; + try {match = cookiePattern.exec(document.cookie)} catch (err) {} + if (match && match[1] !== '') return match[1]; + } + function setVersion(version) { + cookie = 'mjx.latest=' + version; + var time = new Date(); + time.setDate(time.getDate() + 7); + cookie += '; expires=' + time.toGMTString(); + cookie += '; path=/'; + try {document.cookie = cookie} catch (err) {} + } + + function getXMLHttpRequest() { + if (window.XMLHttpRequest) return new XMLHttpRequest(); + if (window.ActiveXObject) { + try {return new ActiveXObject("Msxml2.XMLHTTP")} catch (err) {} + try {return new ActiveXObject("Microsoft.XMLHTTP")} catch (err) {} + } + } + + function loadMathJax(url) { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.async = true; + script.src = url; + var head = document.head || document.getElementsByTagName('head')[0] || document.body; + if (head) { + head.appendChild(script); + } else { + Error("Can't find the document element"); + } + } + + function loadDefaultMathJax() { + var script = getScript(); + if (script) { + loadMathJax(script.src.replace(/CDN-latest\.js/,"MathJax.js")); + } else { + Error("Can't determine the URL for loading MathJax"); + } + } + + function getLatestMathJax(cdn,config,unpacked) { + var request = getXMLHttpRequest(); + if (request) { + request.onreadystatechange = function() { + if (request.readyState === 4) { + if (request.status === 200) { + var json = JSON.parse(request.responseText); + if (json instanceof Array) json = json[0]; + setVersion(json[cdn.version]); + loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); + } else { + Error("Problem aquiring MathJax version: status = " + request.status); + laodDefaultMathJax(); + } + } + } + request.open('GET', cdn.api, true); + request.send(null); + } else { + Error("Can't create XMLHttpRequest object"); + loadDefaultMathJax(); + } + } + + var script = getScript(); + var cdn = getCDN(script); + if (cdn) { + var config = script.src.replace(/.*?(\?|$)/,"$1"); + var unpacked = (script.src.match(/\/unpacked\/CDN-latest\.js/) ? "/unpacked" : ""); + var version = getVersion(); + if (version) { + loadMathJax(cdn.mathjax + version + unpacked + '/MathJax.js' + config); + } else { + getLatestMathJax(cdn, config, unpacked); + } + } else { + loadDefaultMathJax(); + } + +})(); From d49394aca18839fabaf3876edfcc7dd3e5cea5f2 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 10 Apr 2017 19:13:04 -0400 Subject: [PATCH 04/16] Don't load past version 2 (i.e., don't automatically load version 3). --- unpacked/CDN-latest.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/unpacked/CDN-latest.js b/unpacked/CDN-latest.js index a946b06c0..e235dbd68 100644 --- a/unpacked/CDN-latest.js +++ b/unpacked/CDN-latest.js @@ -95,12 +95,16 @@ if (request.status === 200) { var json = JSON.parse(request.responseText); if (json instanceof Array) json = json[0]; - setVersion(json[cdn.version]); - loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); + var version = json[cdn.version]; + if (version.substr(0,1) === '2') { + setVersion(version); + loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); + return; + } } else { Error("Problem aquiring MathJax version: status = " + request.status); - laodDefaultMathJax(); } + laodDefaultMathJax(); } } request.open('GET', cdn.api, true); From 4fd69bee0f5c0ab9992ee29b27d8a8a6a31ce27b Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 12 Apr 2017 15:40:10 -0400 Subject: [PATCH 05/16] Rename CDN-latest.js to latest.js, and make a copy in the main directory, not just the unpacked one. --- unpacked/CDN-latest.js => latest.js | 6 +- unpacked/latest.js | 133 ++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 3 deletions(-) rename unpacked/CDN-latest.js => latest.js (95%) create mode 100644 unpacked/latest.js diff --git a/unpacked/CDN-latest.js b/latest.js similarity index 95% rename from unpacked/CDN-latest.js rename to latest.js index e235dbd68..2449ac4fa 100644 --- a/unpacked/CDN-latest.js +++ b/latest.js @@ -81,7 +81,7 @@ function loadDefaultMathJax() { var script = getScript(); if (script) { - loadMathJax(script.src.replace(/CDN-latest\.js/,"MathJax.js")); + loadMathJax(script.src.replace(/\/latest\.js/, "/MathJax.js")); } else { Error("Can't determine the URL for loading MathJax"); } @@ -118,8 +118,8 @@ var script = getScript(); var cdn = getCDN(script); if (cdn) { - var config = script.src.replace(/.*?(\?|$)/,"$1"); - var unpacked = (script.src.match(/\/unpacked\/CDN-latest\.js/) ? "/unpacked" : ""); + var config = script.src.replace(/.*?(\?|$)/, "$1"); + var unpacked = (script.src.match(/\/unpacked\/latest\.js/) ? "/unpacked" : ""); var version = getVersion(); if (version) { loadMathJax(cdn.mathjax + version + unpacked + '/MathJax.js' + config); diff --git a/unpacked/latest.js b/unpacked/latest.js new file mode 100644 index 000000000..2449ac4fa --- /dev/null +++ b/unpacked/latest.js @@ -0,0 +1,133 @@ +(function () { + + var CDN = { + 'cdnjs.cloudflare.com': { + api: 'https://api.cdnjs.com/libraries/mathjax?fields=version', + version: 'version', + mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/' + }, + + 'cdn.rawgit.com': { + api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest', + version: 'tag_name', + mathjax: 'https://cdn.rawgit.com/mathjax/MathJax/' + }, + + 'cdn.jsdelivr.net': { + api: 'https://api.jsdelivr.com/v1/jsdelivr/libraries?name=mathjax&lastversion=*', + version: 'lastversion', + mathjax: 'https://cdn.jsdelivr.net/mathjax/' + } + }; + + function Error(message) { + if (console && console.log) console.log(message); + } + + function getScript() { + if (document.currentScript) return document.currentScript; + var scripts = document.getElementsByTagName("script"); + for (var i = 0, m = scripts.length; i < m; i++) { + var script = scripts[i]; + for (var cdn in CDN) {if (CDN.hasOwnProperty(cdn)) { + var url = CDN[cdn].mathjax; + if (script.src && script.src.substr(0,url.length) === url) return script; + }} + } + } + + function getCDN(script) { + if (!script) return; + var cdn = script.src.replace(/https:\/\//,'').replace(/[\/\?].*/,''); + return CDN[cdn]; + } + + var cookiePattern = /(?:^|;\s*)mjx\.latest=([^;]*)(?:;|$)/; + function getVersion() { + var match; + try {match = cookiePattern.exec(document.cookie)} catch (err) {} + if (match && match[1] !== '') return match[1]; + } + function setVersion(version) { + cookie = 'mjx.latest=' + version; + var time = new Date(); + time.setDate(time.getDate() + 7); + cookie += '; expires=' + time.toGMTString(); + cookie += '; path=/'; + try {document.cookie = cookie} catch (err) {} + } + + function getXMLHttpRequest() { + if (window.XMLHttpRequest) return new XMLHttpRequest(); + if (window.ActiveXObject) { + try {return new ActiveXObject("Msxml2.XMLHTTP")} catch (err) {} + try {return new ActiveXObject("Microsoft.XMLHTTP")} catch (err) {} + } + } + + function loadMathJax(url) { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.async = true; + script.src = url; + var head = document.head || document.getElementsByTagName('head')[0] || document.body; + if (head) { + head.appendChild(script); + } else { + Error("Can't find the document element"); + } + } + + function loadDefaultMathJax() { + var script = getScript(); + if (script) { + loadMathJax(script.src.replace(/\/latest\.js/, "/MathJax.js")); + } else { + Error("Can't determine the URL for loading MathJax"); + } + } + + function getLatestMathJax(cdn,config,unpacked) { + var request = getXMLHttpRequest(); + if (request) { + request.onreadystatechange = function() { + if (request.readyState === 4) { + if (request.status === 200) { + var json = JSON.parse(request.responseText); + if (json instanceof Array) json = json[0]; + var version = json[cdn.version]; + if (version.substr(0,1) === '2') { + setVersion(version); + loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); + return; + } + } else { + Error("Problem aquiring MathJax version: status = " + request.status); + } + laodDefaultMathJax(); + } + } + request.open('GET', cdn.api, true); + request.send(null); + } else { + Error("Can't create XMLHttpRequest object"); + loadDefaultMathJax(); + } + } + + var script = getScript(); + var cdn = getCDN(script); + if (cdn) { + var config = script.src.replace(/.*?(\?|$)/, "$1"); + var unpacked = (script.src.match(/\/unpacked\/latest\.js/) ? "/unpacked" : ""); + var version = getVersion(); + if (version) { + loadMathJax(cdn.mathjax + version + unpacked + '/MathJax.js' + config); + } else { + getLatestMathJax(cdn, config, unpacked); + } + } else { + loadDefaultMathJax(); + } + +})(); From 8d30a0453da79f57a358ccd6eb6997568ee807e4 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 12 Apr 2017 15:46:44 -0400 Subject: [PATCH 06/16] Make version check a little more robust. --- latest.js | 2 +- unpacked/latest.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/latest.js b/latest.js index 2449ac4fa..1c3a650c4 100644 --- a/latest.js +++ b/latest.js @@ -96,7 +96,7 @@ var json = JSON.parse(request.responseText); if (json instanceof Array) json = json[0]; var version = json[cdn.version]; - if (version.substr(0,1) === '2') { + if (version.substr(0,2) === '2.') { setVersion(version); loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); return; diff --git a/unpacked/latest.js b/unpacked/latest.js index 2449ac4fa..1c3a650c4 100644 --- a/unpacked/latest.js +++ b/unpacked/latest.js @@ -96,7 +96,7 @@ var json = JSON.parse(request.responseText); if (json instanceof Array) json = json[0]; var version = json[cdn.version]; - if (version.substr(0,1) === '2') { + if (version.substr(0,2) === '2.') { setVersion(version); loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config); return; From 513954a6d589c56bcba08b270d40efcc5e7c94fa Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 15 Apr 2017 09:43:01 -0400 Subject: [PATCH 07/16] Add latest param in case we need MathJax.js to know it has been called from lastest.js in the future. --- latest.js | 1 + unpacked/latest.js | 1 + 2 files changed, 2 insertions(+) diff --git a/latest.js b/latest.js index 1c3a650c4..4a679f8aa 100644 --- a/latest.js +++ b/latest.js @@ -119,6 +119,7 @@ var cdn = getCDN(script); if (cdn) { var config = script.src.replace(/.*?(\?|$)/, "$1"); + config += (config ? '&' : '?') + 'latest'; var unpacked = (script.src.match(/\/unpacked\/latest\.js/) ? "/unpacked" : ""); var version = getVersion(); if (version) { diff --git a/unpacked/latest.js b/unpacked/latest.js index 1c3a650c4..4a679f8aa 100644 --- a/unpacked/latest.js +++ b/unpacked/latest.js @@ -119,6 +119,7 @@ var cdn = getCDN(script); if (cdn) { var config = script.src.replace(/.*?(\?|$)/, "$1"); + config += (config ? '&' : '?') + 'latest'; var unpacked = (script.src.match(/\/unpacked\/latest\.js/) ? "/unpacked" : ""); var version = getVersion(); if (version) { From 3245058ccb07b31b173ca95db7a8141b53d006a1 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 18 Apr 2017 11:30:55 -0400 Subject: [PATCH 08/16] Add a11y extensions, add [a11y] path, and allow MathJax to look for paths recursively. --- extensions/a11y/accessibility-menu.js | 1 + extensions/a11y/auto-collapse.js | 1 + extensions/a11y/collapsible.js | 1 + extensions/a11y/explorer.js | 1 + extensions/a11y/invalid_keypress.mp3 | Bin 0 -> 9030 bytes extensions/a11y/invalid_keypress.ogg | Bin 0 -> 5353 bytes extensions/a11y/mathjax-sre.js | 742 ++++++++++++++++ extensions/a11y/mathmaps/.htaccess | 3 + .../a11y/mathmaps/functions/algebra.json | 1 + .../a11y/mathmaps/functions/elementary.json | 1 + .../a11y/mathmaps/functions/hyperbolic.json | 1 + .../a11y/mathmaps/functions/trigonometry.json | 1 + extensions/a11y/mathmaps/mathmaps_ie.js | 1 + .../a11y/mathmaps/symbols/greek-capital.json | 1 + .../mathmaps/symbols/greek-mathfonts.json | 1 + .../a11y/mathmaps/symbols/greek-scripts.json | 1 + .../a11y/mathmaps/symbols/greek-small.json | 1 + .../a11y/mathmaps/symbols/greek-symbols.json | 1 + .../a11y/mathmaps/symbols/hebrew_letters.json | 1 + .../symbols/latin-lower-double-accent.json | 1 + .../mathmaps/symbols/latin-lower-normal.json | 1 + .../symbols/latin-lower-phonetic.json | 1 + .../symbols/latin-lower-single-accent.json | 1 + .../mathmaps/symbols/latin-mathfonts.json | 1 + .../a11y/mathmaps/symbols/latin-rest.json | 1 + .../symbols/latin-upper-double-accent.json | 1 + .../mathmaps/symbols/latin-upper-normal.json | 1 + .../symbols/latin-upper-single-accent.json | 1 + .../a11y/mathmaps/symbols/math_angles.json | 1 + .../a11y/mathmaps/symbols/math_arrows.json | 1 + .../mathmaps/symbols/math_characters.json | 1 + .../mathmaps/symbols/math_delimiters.json | 1 + .../a11y/mathmaps/symbols/math_digits.json | 1 + .../a11y/mathmaps/symbols/math_geometry.json | 1 + .../a11y/mathmaps/symbols/math_harpoons.json | 1 + .../mathmaps/symbols/math_non_characters.json | 1 + .../a11y/mathmaps/symbols/math_symbols.json | 1 + .../mathmaps/symbols/math_whitespace.json | 1 + .../a11y/mathmaps/symbols/other_stars.json | 1 + extensions/a11y/mathmaps/units/energy.json | 1 + extensions/a11y/mathmaps/units/length.json | 1 + extensions/a11y/mathmaps/units/memory.json | 1 + extensions/a11y/mathmaps/units/other.json | 1 + extensions/a11y/mathmaps/units/speed.json | 1 + .../a11y/mathmaps/units/temperature.json | 1 + extensions/a11y/mathmaps/units/time.json | 1 + extensions/a11y/mathmaps/units/volume.json | 1 + extensions/a11y/mathmaps/units/weight.json | 1 + extensions/a11y/semantic-enrich.js | 1 + extensions/a11y/wgxpath.install.js | 77 ++ unpacked/MathJax.js | 22 +- unpacked/config/AM_CHTML-full.js | 4 +- unpacked/config/AM_CHTML.js | 4 +- unpacked/config/AM_HTMLorMML-full.js | 4 +- unpacked/config/AM_HTMLorMML.js | 4 +- unpacked/config/AM_SVG-full.js | 4 +- unpacked/config/AM_SVG.js | 4 +- unpacked/config/Accessible-full.js | 4 +- unpacked/config/Accessible.js | 4 +- unpacked/config/MML_CHTML-full.js | 4 +- unpacked/config/MML_CHTML.js | 4 +- unpacked/config/MML_HTMLorMML-full.js | 4 +- unpacked/config/MML_HTMLorMML.js | 4 +- unpacked/config/MML_SVG-full.js | 4 +- unpacked/config/MML_SVG.js | 4 +- unpacked/config/TeX-AMS-MML_HTMLorMML-full.js | 4 +- unpacked/config/TeX-AMS-MML_HTMLorMML.js | 4 +- unpacked/config/TeX-AMS-MML_SVG-full.js | 4 +- unpacked/config/TeX-AMS-MML_SVG.js | 4 +- unpacked/config/TeX-AMS_CHTML-full.js | 4 +- unpacked/config/TeX-AMS_CHTML.js | 4 +- unpacked/config/TeX-AMS_HTML-full.js | 4 +- unpacked/config/TeX-AMS_HTML.js | 4 +- unpacked/config/TeX-AMS_SVG-full.js | 4 +- unpacked/config/TeX-AMS_SVG.js | 4 +- unpacked/config/TeX-MML-AM_CHTML-full.js | 4 +- unpacked/config/TeX-MML-AM_CHTML.js | 4 +- unpacked/config/TeX-MML-AM_HTMLorMML-full.js | 4 +- unpacked/config/TeX-MML-AM_HTMLorMML.js | 4 +- unpacked/config/TeX-MML-AM_SVG-full.js | 4 +- unpacked/config/TeX-MML-AM_SVG.js | 4 +- .../extensions/a11y/accessibility-menu.js | 182 ++++ unpacked/extensions/a11y/auto-collapse.js | 498 +++++++++++ unpacked/extensions/a11y/collapsible.js | 741 ++++++++++++++++ unpacked/extensions/a11y/explorer.js | 809 ++++++++++++++++++ unpacked/extensions/a11y/invalid_keypress.mp3 | Bin 0 -> 9030 bytes unpacked/extensions/a11y/invalid_keypress.ogg | Bin 0 -> 5353 bytes unpacked/extensions/a11y/mathjax-sre.js | 742 ++++++++++++++++ unpacked/extensions/a11y/mathmaps/.htaccess | 3 + .../a11y/mathmaps/functions/algebra.json | 1 + .../a11y/mathmaps/functions/elementary.json | 1 + .../a11y/mathmaps/functions/hyperbolic.json | 1 + .../a11y/mathmaps/functions/trigonometry.json | 1 + .../extensions/a11y/mathmaps/mathmaps_ie.js | 1 + .../a11y/mathmaps/symbols/greek-capital.json | 1 + .../mathmaps/symbols/greek-mathfonts.json | 1 + .../a11y/mathmaps/symbols/greek-scripts.json | 1 + .../a11y/mathmaps/symbols/greek-small.json | 1 + .../a11y/mathmaps/symbols/greek-symbols.json | 1 + .../a11y/mathmaps/symbols/hebrew_letters.json | 1 + .../symbols/latin-lower-double-accent.json | 1 + .../mathmaps/symbols/latin-lower-normal.json | 1 + .../symbols/latin-lower-phonetic.json | 1 + .../symbols/latin-lower-single-accent.json | 1 + .../mathmaps/symbols/latin-mathfonts.json | 1 + .../a11y/mathmaps/symbols/latin-rest.json | 1 + .../symbols/latin-upper-double-accent.json | 1 + .../mathmaps/symbols/latin-upper-normal.json | 1 + .../symbols/latin-upper-single-accent.json | 1 + .../a11y/mathmaps/symbols/math_angles.json | 1 + .../a11y/mathmaps/symbols/math_arrows.json | 1 + .../mathmaps/symbols/math_characters.json | 1 + .../mathmaps/symbols/math_delimiters.json | 1 + .../a11y/mathmaps/symbols/math_digits.json | 1 + .../a11y/mathmaps/symbols/math_geometry.json | 1 + .../a11y/mathmaps/symbols/math_harpoons.json | 1 + .../mathmaps/symbols/math_non_characters.json | 1 + .../a11y/mathmaps/symbols/math_symbols.json | 1 + .../mathmaps/symbols/math_whitespace.json | 1 + .../a11y/mathmaps/symbols/other_stars.json | 1 + .../a11y/mathmaps/units/energy.json | 1 + .../a11y/mathmaps/units/length.json | 1 + .../a11y/mathmaps/units/memory.json | 1 + .../extensions/a11y/mathmaps/units/other.json | 1 + .../extensions/a11y/mathmaps/units/speed.json | 1 + .../a11y/mathmaps/units/temperature.json | 1 + .../extensions/a11y/mathmaps/units/time.json | 1 + .../a11y/mathmaps/units/volume.json | 1 + .../a11y/mathmaps/units/weight.json | 1 + unpacked/extensions/a11y/semantic-enrich.js | 206 +++++ unpacked/extensions/a11y/wgxpath.install.js | 77 ++ 131 files changed, 4239 insertions(+), 68 deletions(-) create mode 100644 extensions/a11y/accessibility-menu.js create mode 100644 extensions/a11y/auto-collapse.js create mode 100644 extensions/a11y/collapsible.js create mode 100644 extensions/a11y/explorer.js create mode 100644 extensions/a11y/invalid_keypress.mp3 create mode 100755 extensions/a11y/invalid_keypress.ogg create mode 100644 extensions/a11y/mathjax-sre.js create mode 100644 extensions/a11y/mathmaps/.htaccess create mode 100644 extensions/a11y/mathmaps/functions/algebra.json create mode 100644 extensions/a11y/mathmaps/functions/elementary.json create mode 100644 extensions/a11y/mathmaps/functions/hyperbolic.json create mode 100644 extensions/a11y/mathmaps/functions/trigonometry.json create mode 100644 extensions/a11y/mathmaps/mathmaps_ie.js create mode 100644 extensions/a11y/mathmaps/symbols/greek-capital.json create mode 100644 extensions/a11y/mathmaps/symbols/greek-mathfonts.json create mode 100644 extensions/a11y/mathmaps/symbols/greek-scripts.json create mode 100644 extensions/a11y/mathmaps/symbols/greek-small.json create mode 100644 extensions/a11y/mathmaps/symbols/greek-symbols.json create mode 100644 extensions/a11y/mathmaps/symbols/hebrew_letters.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-lower-double-accent.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-lower-normal.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-lower-phonetic.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-lower-single-accent.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-mathfonts.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-rest.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-upper-double-accent.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-upper-normal.json create mode 100644 extensions/a11y/mathmaps/symbols/latin-upper-single-accent.json create mode 100644 extensions/a11y/mathmaps/symbols/math_angles.json create mode 100644 extensions/a11y/mathmaps/symbols/math_arrows.json create mode 100644 extensions/a11y/mathmaps/symbols/math_characters.json create mode 100644 extensions/a11y/mathmaps/symbols/math_delimiters.json create mode 100644 extensions/a11y/mathmaps/symbols/math_digits.json create mode 100644 extensions/a11y/mathmaps/symbols/math_geometry.json create mode 100644 extensions/a11y/mathmaps/symbols/math_harpoons.json create mode 100644 extensions/a11y/mathmaps/symbols/math_non_characters.json create mode 100644 extensions/a11y/mathmaps/symbols/math_symbols.json create mode 100644 extensions/a11y/mathmaps/symbols/math_whitespace.json create mode 100644 extensions/a11y/mathmaps/symbols/other_stars.json create mode 100644 extensions/a11y/mathmaps/units/energy.json create mode 100644 extensions/a11y/mathmaps/units/length.json create mode 100644 extensions/a11y/mathmaps/units/memory.json create mode 100644 extensions/a11y/mathmaps/units/other.json create mode 100644 extensions/a11y/mathmaps/units/speed.json create mode 100644 extensions/a11y/mathmaps/units/temperature.json create mode 100644 extensions/a11y/mathmaps/units/time.json create mode 100644 extensions/a11y/mathmaps/units/volume.json create mode 100644 extensions/a11y/mathmaps/units/weight.json create mode 100644 extensions/a11y/semantic-enrich.js create mode 100644 extensions/a11y/wgxpath.install.js create mode 100644 unpacked/extensions/a11y/accessibility-menu.js create mode 100644 unpacked/extensions/a11y/auto-collapse.js create mode 100644 unpacked/extensions/a11y/collapsible.js create mode 100644 unpacked/extensions/a11y/explorer.js create mode 100644 unpacked/extensions/a11y/invalid_keypress.mp3 create mode 100755 unpacked/extensions/a11y/invalid_keypress.ogg create mode 100644 unpacked/extensions/a11y/mathjax-sre.js create mode 100644 unpacked/extensions/a11y/mathmaps/.htaccess create mode 100644 unpacked/extensions/a11y/mathmaps/functions/algebra.json create mode 100644 unpacked/extensions/a11y/mathmaps/functions/elementary.json create mode 100644 unpacked/extensions/a11y/mathmaps/functions/hyperbolic.json create mode 100644 unpacked/extensions/a11y/mathmaps/functions/trigonometry.json create mode 100644 unpacked/extensions/a11y/mathmaps/mathmaps_ie.js create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/greek-capital.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/greek-mathfonts.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/greek-scripts.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/greek-small.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/greek-symbols.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/hebrew_letters.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-lower-double-accent.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-lower-normal.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-lower-phonetic.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-lower-single-accent.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-mathfonts.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-rest.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-upper-double-accent.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-upper-normal.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/latin-upper-single-accent.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_angles.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_arrows.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_characters.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_delimiters.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_digits.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_geometry.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_harpoons.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_non_characters.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_symbols.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/math_whitespace.json create mode 100644 unpacked/extensions/a11y/mathmaps/symbols/other_stars.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/energy.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/length.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/memory.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/other.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/speed.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/temperature.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/time.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/volume.json create mode 100644 unpacked/extensions/a11y/mathmaps/units/weight.json create mode 100644 unpacked/extensions/a11y/semantic-enrich.js create mode 100644 unpacked/extensions/a11y/wgxpath.install.js diff --git a/extensions/a11y/accessibility-menu.js b/extensions/a11y/accessibility-menu.js new file mode 100644 index 000000000..546608e24 --- /dev/null +++ b/extensions/a11y/accessibility-menu.js @@ -0,0 +1 @@ +!function(a,b){var c,d,e=a.config.menuSettings,f=Function.prototype.bind?function(a,b){return a.bind(b)}:function(a,b){return function(){a.apply(b,arguments)}},g=Object.keys||function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},h=MathJax.Ajax.config.path;h.a11y||(h.a11y=a.config.root+"/extensions/a11y");var i=b["accessibility-menu"]={version:"1.2.0",prefix:"",default:{},modules:[],MakeOption:function(a){return i.prefix+a},GetOption:function(a){return e[i.MakeOption(a)]},AddDefaults:function(){for(var a,b=g(i.default),c=0;a=b[c];c++){var d=i.MakeOption(a);void 0===e[d]&&(e[d]=i.default[a])}},AddMenu:function(){for(var a,b=Array(this.modules.length),e=0;a=this.modules[e];e++)b[e]=a.placeHolder;var f=d.FindId("Accessibility");if(f)b.unshift(c.RULE()),f.submenu.items.push.apply(f.submenu.items,b);else{var g=(d.FindId("Settings","Renderer")||{}).submenu;g&&(b.unshift(c.RULE()),b.unshift(g.items.pop()),b.unshift(g.items.pop())),b.unshift("Accessibility");var f=c.SUBMENU.apply(c.SUBMENU,b),h=d.IndexOfId("Locale");h?d.items.splice(h,0,f):d.items.push(c.RULE(),f)}},Register:function(a){i.default[a.option]=!1,i.modules.push(a)},Startup:function(){c=MathJax.Menu.ITEM,d=MathJax.Menu.menu;for(var a,b=0;a=this.modules[b];b++)a.CreateMenu();this.AddMenu()},LoadExtensions:function(){for(var b=[],c=0;module=this.modules[c];c++)e[module.option]&&b.push(module.module);return b.length?a.Startup.loadArray(b):null}},j=MathJax.Extension.ModuleLoader=MathJax.Object.Subclass({option:"",name:["",""],module:"",placeHolder:null,submenu:!1,extension:null,Init:function(a,b,c,d,e){this.option=a,this.name=[b.replace(/ /g,""),b],this.module=c,this.extension=d,this.submenu=e||!1},CreateMenu:function(){var a=f(this.Load,this);this.submenu?this.placeHolder=c.SUBMENU(this.name,c.CHECKBOX(["Activate","Activate"],i.MakeOption(this.option),{action:a}),c.RULE(),c.COMMAND(["OptionsWhenActive","(Options when Active)"],null,{disabled:!0})):this.placeHolder=c.CHECKBOX(this.name,i.MakeOption(this.option),{action:a})},Load:function(){a.Queue(["Require",MathJax.Ajax,this.module,["Enable",this]])},Enable:function(a){var b=MathJax.Extension[this.extension];b&&(b.Enable(!0,!0),MathJax.Menu.saveCookie())}});i.Register(j("collapsible","Collapsible Math","[a11y]/collapsible.js","collapsible")),i.Register(j("autocollapse","Auto Collapse","[a11y]/auto-collapse.js","auto-collapse")),i.Register(j("explorer","Explorer","[a11y]/explorer.js","explorer",!0)),i.AddDefaults(),a.Register.StartupHook("End Extensions",function(){a.Register.StartupHook("MathMenu Ready",function(){i.Startup(),a.Startup.signal.Post("Accessibility Menu Ready")},5)},5),MathJax.Callback.Queue(["LoadExtensions",i],["loadComplete",MathJax.Ajax,"[a11y]/accessibility-menu.js"])}(MathJax.Hub,MathJax.Extension); \ No newline at end of file diff --git a/extensions/a11y/auto-collapse.js b/extensions/a11y/auto-collapse.js new file mode 100644 index 000000000..5dcb3de5c --- /dev/null +++ b/extensions/a11y/auto-collapse.js @@ -0,0 +1 @@ +!function(a){var b=a.config.menuSettings,c={},d=MathJax.Ajax.config.path;d.a11y||(d.a11y=a.config.root+"/extensions/a11y");var e=MathJax.Extension["auto-collapse"]={version:"1.2.0",config:a.CombineConfig("auto-collapse",{disabled:!1}),dependents:[],Enable:function(d,e){b.autocollapse=!0,e&&(c.autocollapse=!0),this.config.disabled=!1,MathJax.Extension.collapsible.Enable(!1,e),d&&a.Queue(["Reprocess",a],["CollapseWideMath",this])},Disable:function(d,e){b.autocollapse=!1,e&&(c.autocollapse=!1),this.config.disabled=!0;for(var f=this.dependents.length-1;f>=0;f--){var g=this.dependents[f];g.Disable&&g.Disable(!1,e)}d&&a.Queue(["Rerender",a])},Dependent:function(a){this.dependents.push(a)},Startup:function(){var b=MathJax.Extension.collapsible;b&&b.Dependent(this),a.postInputHooks.Add(["Filter",e],150),a.Queue(function(){return e.CollapseWideMath()}),window.addEventListener?window.addEventListener("resize",e.resizeHandler,!1):window.attachEvent?window.attachEvent("onresize",e.resizeHandler):window.onresize=e.resizeHandler},Filter:function(a,b,c){a.enriched&&!this.config.disabled&&("block"===a.root.Get("display")||c.parentNode.childNodes.length<=3)&&(a.root.SRE={action:this.Actions(a.root)})},Actions:function(a){var b=[];return this.getActions(a,0,b),this.sortActions(b)},getActions:function(a,b,c){if(!a.isToken&&a.data){b++;for(var d=0,e=a.data.length;db?1:0},CollapseWideMath:function(b){if(!this.config.disabled){this.GetContainerWidths(b);var c=a.getAllJax(b),d={collapse:[],jax:c,m:c.length,i:0,changed:!1};return this.collapseState(d)}},collapseState:function(b){for(var c=b.collapse;b.ie.M)){var f=this.getActionWidths(d,b);if(f)return f;this.collapseActions(e,b),b.changed&&c.push(d.SourceElement())}b.i++}if(0!==c.length)return 1===c.length&&(c=c[0]),a.Rerender(c)},collapseActions:function(a,b){for(var c=a.width,d=c,e=1e6,f=a.action.length-1;f>=0;f--){var g=a.action[f],h=g.selection;c>a.cwidth?(g.selection=1,d=g.SREwidth,e=c):g.selection=2,c=g.SREwidth,a.DOMupdate?document.getElementById(g.id).setAttribute("selection",g.selection):g.selection!==h&&(b.changed=!0)}a.m=d,a.M=e},getActionWidths:function(a,b){if(!a.root.SRE.actionWidths){MathJax.OutputJax[a.outputJax].getMetrics(a);try{this.computeActionWidths(a)}catch(a){if(!a.restart)throw a;return MathJax.Callback.After(["collapseState",this,b],a.restart)}b.changed=!0}return null},computeActionWidths:function(a){var b,c=a.root.SRE,d=c.action,e={};for(c.width=a.sreGetRootWidth(e),b=d.length-1;b>=0;b--)d[b].selection=2;for(b=d.length-1;b>=0;b--){var f=d[b];null==f.SREwidth&&(f.selection=1,f.SREwidth=a.sreGetActionWidth(e,f))}c.actionWidths=!0},GetContainerWidths:function(b){var c,d,e,f,g,h=a.getAllJax(b),i=MathJax.HTML.Element("span",{style:{display:"block"}}),j=[];for(c=0,d=h.length;c=0;f--){var g=this.dependents[f];g.Disable&&g.Disable(!1,e)}b&&a.Queue(["Reprocess",a])},Dependent:function(a){this.dependents.push(a)},Startup:function(){b=MathJax.ElementJax.mml;var c=MathJax.Extension["semantic-enrich"];c&&c.Dependent(this),a.postInputHooks.Add(["Filter",h],100)},Filter:function(a,b,c){a.enriched&&!this.config.disabled&&(a.root=a.root.Collapse(),a.root.inputID=c.id)},Marker:function(a){return b.mtext("\u25c2"+a+"\u25b8").With({mathcolor:"blue",attr:{},attrNames:[]})},MakeAction:function(a,c){var d=b.maction(a).With({id:this.getActionID(),actiontype:"toggle",complexity:a.getComplexity(),collapsible:!0,attrNames:["id","actiontype","selection",f],attr:{},selection:2});if(d.attr[f]=d.complexity,"math"===c.type){for(var e,g=b.mrow().With({data:c.data,complexity:c.complexity,attrNames:[],attr:{}}),h=c.attrNames.length-1;e=c.attrNames[h];h--)"data-semantic-"===e.substr(0,14)&&(g.attr[e]=c.attr[e],g.attrNames.push(e),delete c.attr[e],c.attrNames.splice(h,1));g.complexity=c.complexity,d.Append(g),c.data=[],c.Append(d),c.complexity=d.complexity,d=c}else d.Append(c);return d},actionID:1,getActionID:function(){return"MJX-Collapse-"+this.actionID++},Collapse:function(a){a.getComplexity();var b=(a.attr||{})["data-semantic-type"];if(b)if(this["Collapse_"+b])a=this["Collapse_"+b](a);else if(this.COLLAPSE[b]&&this.MARKER[b]){var c=a.attr["data-semantic-role"],d=this.COLLAPSE[b];if("number"!=typeof d&&(d=d[c]||d.default),a.complexity>d){var e=this.MARKER[b];"string"!=typeof e&&(e=e[c]||e.default),a=this.MakeAction(this.Marker(e),a)}}return a},UncollapseChild:function(a,b,c){if(null==c&&(c=1),this.SplitAttribute(a,"children").length===c){var d=1===a.data.length&&a.data[0].inferred?a.data[0]:a;if(d&&d.data[b]&&d.data[b].collapsible)return d.SetData(b,d.data[b].data[1]),a.complexity=d.complexity=null,a.getComplexity(),1}return 0},FindChildText:function(a,b){var c=this.FindChild(a,b);return c?(c.CoreMO()||c).data.join(""):"?"},FindChild:function(a,b){if(a){if(a.attr&&a.attr["data-semantic-id"]===b)return a;if(!a.isToken)for(var c=0,d=a.data.length;cthis.COLLAPSE.fenced&&"leftright"===a.attr["data-semantic-role"]){var b=a.data[0].data.join("")+a.data[a.data.length-1].data.join("");a=this.MakeAction(this.Marker(b),a)}return a},Collapse_appl:function(a){if(this.UncollapseChild(a,2,2)){var b=this.MARKER.appl;b=b[a.attr["data-semantic-role"]]||b.default,a=this.MakeAction(this.Marker(b),a)}return a},Collapse_sqrt:function(a){return this.UncollapseChild(a,0),a.complexity>this.COLLAPSE.sqrt&&(a=this.MakeAction(this.Marker(this.MARKER.sqrt),a)),a},Collapse_root:function(a){return this.UncollapseChild(a,0),a.complexity>this.COLLAPSE.sqrt&&(a=this.MakeAction(this.Marker(this.MARKER.sqrt),a)),a},Collapse_enclose:function(a){if(1===this.SplitAttribute(a,"children").length){var b=1===a.data.length&&a.data[0].inferred?a.data[0]:a;if(b.data[0]&&b.data[0].collapsible){var c=b.data[0];b.SetData(0,c.data[1]),c.SetData(1,a),a=c}}return a},Collapse_bigop:function(a){if(a.complexity>this.COLLAPSE.bigop||"mo"!==a.data[0].type){var b=this.SplitAttribute(a,"content").pop(),c=h.FindChildText(a,b);a=this.MakeAction(this.Marker(c),a)}return a},Collapse_integral:function(a){if(a.complexity>this.COLLAPSE.integral||"mo"!==a.data[0].type){var b=this.SplitAttribute(a,"content")[0],c=h.FindChildText(a,b);a=this.MakeAction(this.Marker(c),a)}return a},Collapse_relseq:function(a){if(a.complexity>this.COLLAPSE.relseq){var b=this.SplitAttribute(a,"content"),c=h.FindChildText(a,b[0]);b.length>1&&(c+="\u22ef"),a=this.MakeAction(this.Marker(c),a)}return a},Collapse_multirel:function(a){if(a.complexity>this.COLLAPSE.multirel){var b=this.SplitAttribute(a,"content"),c=h.FindChildText(a,b[0])+"\u22ef";a=this.MakeAction(this.Marker(c),a)}return a},Collapse_superscript:function(a){return this.UncollapseChild(a,0,2),a.complexity>this.COLLAPSE.superscript&&(a=this.MakeAction(this.Marker(this.MARKER.superscript),a)),a},Collapse_subscript:function(a){return this.UncollapseChild(a,0,2),a.complexity>this.COLLAPSE.subscript&&(a=this.MakeAction(this.Marker(this.MARKER.subscript),a)),a},Collapse_subsup:function(a){return this.UncollapseChild(a,0,3),a.complexity>this.COLLAPSE.subsup&&(a=this.MakeAction(this.Marker(this.MARKER.subsup),a)),a}};a.Register.StartupHook("End Extensions",function(){null==c.collapsible?c.collapsible=!h.config.disabled:h.config.disabled=!c.collapsible,a.Register.StartupHook("MathMenu Ready",function(){d=MathJax.Menu.cookie;var a,b=function(a){h[c.collapsible?"Enable":"Disable"](!0,!0),MathJax.Menu.saveCookie()},e=MathJax.Menu.ITEM,f=MathJax.Menu.menu,g=e.CHECKBOX(["CollapsibleMath","Collapsible Math"],"collapsible",{action:b}),i=(f.FindId("Accessibility")||{}).submenu;i?(a=i.IndexOfId("CollapsibleMath"),null!==a?i.items[a]=g:i.items.push(e.RULE(),g)):(a=f.IndexOfId("About"),f.items.splice(a,0,g,e.RULE()))},15)},15)}(MathJax.Hub),MathJax.Ajax.Require("[a11y]/semantic-enrich.js"),MathJax.Hub.Register.StartupHook("Semantic Enrich Ready",function(){var a=MathJax.ElementJax.mml,b=MathJax.Extension.collapsible,c=b.COMPLEXITY,d=b.COMPLEXATTR;b.Startup(),a.mbase.Augment({Collapse:function(){return b.Collapse(this)},getComplexity:function(){if(null==this.complexity){var a=0;if(this.isToken)a=c.TEXT*this.data.join("").length+c.TOKEN;else{for(var b=0,e=this.data.length;b1&&(a+=e*c.CHILD)}!this.attrNames||"complexity"in this||this.attrNames.push(d),this.attr&&(this.attr[d]=a),this.complexity=a}return this.complexity},reportComplexity:function(){!this.attr||!this.attrNames||d in this.attr||(this.attrNames.push(d),this.attr[d]=this.complexity)}}),a.mfrac.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity*=c.SCRIPT,this.complexity+=c.FRACTION,this.attr[d]=this.complexity),this.complexity}}),a.msqrt.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity+=c.SQRT,this.attr[d]=this.complexity),this.complexity}}),a.mroot.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity-=(1-c.SCRIPT)*this.data[1].getComplexity(),this.complexity+=c.SQRT,this.attr[d]=this.complexity),this.complexity}}),a.msubsup.Augment({getComplexity:function(){if(null==this.complexity){var a=0;this.data[this.sub]&&(a=this.data[this.sub].getComplexity()+c.CHILD),this.data[this.sup]&&(a=Math.max(this.data[this.sup].getComplexity(),a)),a*=c.SCRIPT,this.data[this.sub]&&(a+=c.CHILD),this.data[this.sup]&&(a+=c.CHILD),this.data[this.base]&&(a+=this.data[this.base].getComplexity()+c.CHILD),this.complexity=a+c.SUBSUP,this.reportComplexity()}return this.complexity}}),a.munderover.Augment({getComplexity:function(){if(null==this.complexity){var a=0;this.data[this.sub]&&(a=this.data[this.sub].getComplexity()+c.CHILD),this.data[this.sup]&&(a=Math.max(this.data[this.sup].getComplexity(),a)),a*=c.SCRIPT,this.data[this.base]&&(a=Math.max(this.data[this.base].getComplexity(),a)),this.data[this.sub]&&(a+=c.CHILD),this.data[this.sup]&&(a+=c.CHILD),this.data[this.base]&&(a+=c.CHILD),this.complexity=a+c.UNDEROVER,this.reportComplexity()}return this.complexity}}),a.mphantom.Augment({getComplexity:function(){return this.complexity=c.PHANTOM,this.reportComplexity(),this.complexity}}),a.ms.Augment({getComplexity:function(){return this.SUPER(arguments).getComplexity.call(this),this.complexity+=this.Get("lquote").length*c.TEXT,this.complexity+=this.Get("rquote").length*c.TEXT,this.attr[d]=this.complexity,this.complexity}}),a.menclose.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity+=c.ACTION,this.attr[d]=this.complexity),this.complexity}}),a.maction.Augment({getComplexity:function(){return this.complexity=(this.collapsible?this.data[0]:this.selected()).getComplexity(),this.reportComplexity(),this.complexity}}),a.semantics.Augment({getComplexity:function(){return null==this.complexity&&(this.complexity=this.data[0]?this.data[0].getComplexity():0,this.reportComplexity()),this.complexity}}),a["annotation-xml"].Augment({getComplexity:function(){return this.complexity=c.XML,this.reportComplexity(),this.complexity}}),a.annotation.Augment({getComplexity:function(){return this.complexity=c.XML,this.reportComplexity(),this.complexity}}),a.mglyph.Augment({getComplexity:function(){return this.complexity=c.GLYPH,this.reportComplexity(),this.complexity}}),MathJax.Hub.Startup.signal.Post("Collapsible Ready"),MathJax.Ajax.loadComplete("[a11y]/collapsible.js")}); \ No newline at end of file diff --git a/extensions/a11y/explorer.js b/extensions/a11y/explorer.js new file mode 100644 index 000000000..0e527c964 --- /dev/null +++ b/extensions/a11y/explorer.js @@ -0,0 +1 @@ +MathJax.Hub.Register.StartupHook("Sre Ready",function(){var a,b,c=MathJax.Hub.config.menuSettings,d={};MathJax.Hub.Register.StartupHook("MathEvents Ready",function(){a=MathJax.Extension.MathEvents.Event.False,b=MathJax.Extension.MathEvents.Event.KEY});var e=MathJax.Extension.explorer={version:"1.2.0",dependents:[],default:{walker:"syntactic",highlight:"none",background:"blue",foreground:"black",speech:!0,generation:"lazy",subtitle:!1,ruleset:"mathspeak-default"},eagerComplexity:80,prefix:"Assistive-",hook:null,oldrules:null,addMenuOption:function(a,b){c[e.prefix+a]=b},addDefaults:function(){for(var a,b=MathJax.Hub.CombineConfig("explorer",e.default),d=Object.keys(b),f=0;a=d[f];f++)void 0===c[e.prefix+a]&&e.addMenuOption(a,b[a]);e.setSpeechOption(),g.Reset()},setOption:function(a,b){c[e.prefix+a]!==b&&(e.addMenuOption(a,b),g.Reset())},getOption:function(a){return c[e.prefix+a]},speechOption:function(a){e.oldrules!==a.value&&(e.setSpeechOption(),g.Regenerate())},setSpeechOption:function(){var a=c[e.prefix+"ruleset"],b=a.split("-");sre.System.getInstance().setupEngine({domain:e.Domain(b[0]),style:b[1],rules:e.RuleSet(b[0])}),e.oldrules=a},Domain:function(a){switch(a){case"chromevox":return"default";case"mathspeak":default:return"mathspeak"}},RuleSet:function(a){switch(a){case"chromevox":return["AbstractionRules","SemanticTreeRules"];case"mathspeak":default:return["AbstractionRules","MathspeakRules"]}},hook:null,Enable:function(a,b){c.explorer=!0,b&&(d.explorer=!0),MathJax.Extension.collapsible.Enable(!1,b),MathJax.Extension.AssistiveMML&&(MathJax.Extension.AssistiveMML.config.disabled=!0,c.assistiveMML=!1,b&&(d.assistiveMML=!1)),this.DisableMenus(!1),this.hook||(this.hook=MathJax.Hub.Register.MessageHook("New Math",["Register",this.Explorer])),a&&MathJax.Hub.Queue(["Reprocess",MathJax.Hub])},Disable:function(a,b){c.explorer=!1,b&&(d.explorer=!1),this.DisableMenus(!0),this.hook&&(MathJax.Hub.UnRegister.MessageHook(this.hook),this.hook=null);for(var e=this.dependents.length-1;e>=0;e--){var f=this.dependents[e];f.Disable&&f.Disable(!1,b)}},DisableMenus:function(a){if(MathJax.Menu){var b=MathJax.Menu.menu.FindId("Accessibility","Explorer");if(b){b=b.submenu;for(var d,f=b.items,g=2;d=f[g];g++)d.disabled=a;a||!b.FindId("SpeechOutput")||c[e.prefix+"speech"]||(b.FindId("Subtitles").disabled=!0,b.FindId("Generation").disabled=!0)}}},Dependent:function(a){this.dependents.push(a)}},f=MathJax.Object.Subclass({div:null,inner:null,Init:function(){this.div=f.Create("assertive"),this.inner=MathJax.HTML.addElement(this.div,"div")},Add:function(){f.added||(document.body.appendChild(this.div),f.added=!0)},Show:function(a,b){this.div.classList.add("MJX_LiveRegion_Show");var c=a.getBoundingClientRect(),d=c.bottom+10+window.pageYOffset,e=c.left+window.pageXOffset;this.div.style.top=d+"px",this.div.style.left=e+"px";var f=b.colorString();this.inner.style.backgroundColor=f.background,this.inner.style.color=f.foreground},Hide:function(a){this.div.classList.remove("MJX_LiveRegion_Show")},Clear:function(){this.Update(""),this.inner.style.top="",this.inner.style.backgroundColor=""},Update:function(a){e.getOption("speech")&&f.Update(this.inner,a)}},{ANNOUNCE:"Navigatable Math in page. Explore with shift space and arrow keys. Expand or collapse elements hitting enter.",announced:!1,added:!1,styles:{".MJX_LiveRegion":{position:"absolute",top:"0",height:"1px",width:"1px",padding:"1px",overflow:"hidden"},".MJX_LiveRegion_Show":{top:"0",position:"absolute",width:"auto",height:"auto",padding:"0px 0px",opacity:1,"z-index":"202",left:0,right:0,margin:"0 auto","background-color":"white","box-shadow":"0px 10px 20px #888",border:"2px solid #CCCCCC"}},Create:function(a){var b=MathJax.HTML.Element("div",{className:"MJX_LiveRegion"});return b.setAttribute("aria-live",a),b},Update:MathJax.Hub.Browser.isPC?function(a,b){a.textContent="",setTimeout(function(){a.textContent=b},100)}:function(a,b){a.textContent="",a.textContent=b},Announce:function(){if(e.getOption("speech")){f.announced=!0,MathJax.Ajax.Styles(f.styles);var a=f.Create("polite");document.body.appendChild(a),f.Update(a,f.ANNOUNCE),setTimeout(function(){document.body.removeChild(a)},1e3)}}});MathJax.Extension.explorer.LiveRegion=f;var g=MathJax.Extension.explorer.Explorer={liveRegion:f(),walker:null,highlighter:null,hoverer:null,flamer:null,speechDiv:null,earconFile:MathJax.Ajax.config.path.a11y+"/invalid_keypress"+(-1!==["Firefox","Chrome","Opera"].indexOf(MathJax.Hub.Browser.name)?".ogg":".mp3"),expanded:!1,focusoutEvent:MathJax.Hub.Browser.isFirefox?"blur":"focusout",focusinEvent:"focus",ignoreFocusOut:!1,jaxCache:{},messageID:null,Reset:function(){g.FlameEnriched()},Register:function(a){if(e.hook){var b=document.getElementById(a[1]);if(b&&b.id){var c=MathJax.Hub.getJaxFor(b.id);c&&c.enriched&&(g.StateChange(b.id,c),g.liveRegion.Add(),g.AddEvent(b))}}},StateChange:function(a,b){g.GetHighlighter(.2);var c=g.jaxCache[a];c&&c===b.root||(c&&g.highlighter.resetState(a+"-Frame"),g.jaxCache[a]=b.root)},AddAria:function(a){a.setAttribute("role","application"),a.setAttribute("aria-label","Math")},AddHook:function(a){g.RemoveHook(),g.hook=MathJax.Hub.Register.MessageHook("End Math",function(b){var c=b[1].id+"-Frame",d=document.getElementById(c);a&&c===g.expanded&&(g.ActivateWalker(d,a),d.focus(),g.expanded=!1)})},RemoveHook:function(){g.hook&&(MathJax.Hub.UnRegister.MessageHook(g.hook),g.hook=null)},AddMessage:function(){return MathJax.Message.Set("Generating Speech Output")},RemoveMessage:function(a){a&&MathJax.Message.Clear(a)},AddEvent:function(a){var b=a.id+"-Frame",c=a.previousSibling;if(c){var d=c.id!==b?c.firstElementChild:c;g.AddAria(d),g.AddMouseEvents(d),"MathJax_MathML"===d.className&&(d=d.firstElementChild),d&&(d.onkeydown=g.Keydown,g.Flame(d),d.addEventListener(g.focusinEvent,function(a){e.hook&&(f.announced||f.Announce())}),d.addEventListener(g.focusoutEvent,function(a){if(e.hook)return g.ignoreFocusOut&&(g.ignoreFocusOut=!1,"enter"===g.walker.moved)?void a.target.focus():void(g.walker&&g.DeactivateWalker())}),e.getOption("speech")&&g.AddSpeech(d))}},AddSpeech:function(a){var b=a.id,c=MathJax.Hub.getJaxFor(b),d=c.root.toMathML();if(a.getAttribute("haslabel")||g.AddMathLabel(d,b),!a.getAttribute("hasspeech"))switch(e.getOption("generation")){case"eager":g.AddSpeechEager(d,b);break;case"mixed":a.querySelectorAll("[data-semantic-complexity]").length>=e.eagerComplexity&&g.AddSpeechEager(d,b)}},AddSpeechLazy:function(a){var b=new sre.TreeSpeechGenerator;b.setRebuilt(g.walker.rebuilt),b.getSpeech(g.walker.rootNode,g.walker.xml),a.setAttribute("hasspeech","true")},AddSpeechEager:function(a,b){g.MakeSpeechTask(a,b,sre.TreeSpeechGenerator,function(a,b){a.setAttribute("hasspeech","true")},5)},AddMathLabel:function(a,b){g.MakeSpeechTask(a,b,sre.SummarySpeechGenerator,function(a,b){a.setAttribute("haslabel","true"),a.setAttribute("aria-label",b)},5)},MakeSpeechTask:function(a,b,c,d,e){var f=g.AddMessage();setTimeout(function(){var e=new c,h=document.getElementById(b),i=new sre.DummyWalker(h,e,g.highlighter,a),j=i.speech();j&&d(h,j),g.RemoveMessage(f)},e)},Keydown:function(c){if(c.keyCode===b.ESCAPE){if(!g.walker)return;return g.RemoveHook(),g.DeactivateWalker(),void a(c)}if(g.walker&&g.walker.isActive()){var d=g.walker.move(c.keyCode);if(null===d)return;if(d){if("expand"===g.walker.moved){if(g.expanded=g.walker.node.id,MathJax.Hub.Browser.isEdge)return g.ignoreFocusOut=!0,void g.DeactivateWalker();if(MathJax.Hub.Browser.isFirefox||MathJax.Hub.Browser.isMSIE)return void g.DeactivateWalker()}g.liveRegion.Update(g.walker.speech()),g.Highlight()}else g.PlayEarcon();return void a(c)}var f=c.target;if(c.keyCode===b.SPACE){if(c.shiftKey&&e.hook){var h=MathJax.Hub.getJaxFor(f);g.ActivateWalker(f,h),g.AddHook(h)}else MathJax.Extension.MathEvents.Event.ContextMenu(c,f);return void a(c)}},GetHighlighter:function(a){g.highlighter=sre.HighlighterFactory.highlighter({color:e.getOption("background"),alpha:a},{color:e.getOption("foreground"),alpha:1},{renderer:MathJax.Hub.outputJax["jax/mml"][0].id,browser:MathJax.Hub.Browser.name})},AddMouseEvents:function(a){sre.HighlighterFactory.addEvents(a,{mouseover:g.MouseOver,mouseout:g.MouseOut},{renderer:MathJax.Hub.outputJax["jax/mml"][0].id,browser:MathJax.Hub.Browser.name})},MouseOver:function(b){if("none"!==e.getOption("highlight")){if("hover"===e.getOption("highlight")){var c=b.currentTarget;g.GetHighlighter(.1),g.highlighter.highlight([c]),g.hoverer=!0}a(b)}},MouseOut:function(b){return g.hoverer&&(g.highlighter.unhighlight(),g.hoverer=!1),a(b)},Flame:function(a){if("flame"===e.getOption("highlight"))return g.GetHighlighter(.05),g.highlighter.highlightAll(a),void(g.flamer=!0)},UnFlame:function(){g.flamer&&(g.highlighter.unhighlightAll(),g.flamer=null)},FlameEnriched:function(){g.UnFlame();for(var a,b=0,c=MathJax.Hub.getAllJax();a=c[b];b++)g.Flame(a.SourceElement().previousSibling)},Walkers:{syntactic:sre.SyntaxWalker,semantic:sre.SemanticWalker,none:sre.DummyWalker},ActivateWalker:function(a,b){var c=e.getOption("speech"),d=g.Walkers[e.getOption("walker")]||g.Walkers.none,f=c?new sre.DirectSpeechGenerator:new sre.DummySpeechGenerator;g.GetHighlighter(.2),g.walker=new d(a,f,g.highlighter,b.root.toMathML()),c&&!a.getAttribute("hasspeech")&&g.AddSpeechLazy(a),g.walker.activate(),c&&(e.getOption("subtitle")&&g.liveRegion.Show(a,g.highlighter),g.liveRegion.Update(g.walker.speech())),g.Highlight(),g.ignoreFocusOut&&setTimeout(function(){g.ignoreFocusOut=!1},500)},DeactivateWalker:function(){g.liveRegion.Clear(),g.liveRegion.Hide(),g.Unhighlight(),g.currentHighlight=null,g.walker.deactivate(),g.walker=null},Highlight:function(){g.Unhighlight(),g.highlighter.highlight(g.walker.getFocus().getNodes())},Unhighlight:function(){g.highlighter.unhighlight()},PlayEarcon:function(){new Audio(g.earconFile).play()},SpeechOutput:function(){g.Reset(),["Subtitles","Generation"].forEach(function(a){var b=MathJax.Menu.menu.FindId("Accessibility","Explorer",a);b&&(b.disabled=!b.disabled)}),g.Regenerate()},Regenerate:function(){for(var a,b=0,c=MathJax.Hub.getAllJax();a=c[b];b++){var d=document.getElementById(a.inputID+"-Frame");d&&(d.removeAttribute("hasSpeech"),g.AddSpeech(d))}},Startup:function(){var a=MathJax.Extension.collapsible;a&&a.Dependent(e),e.addDefaults()}};MathJax.Hub.Register.StartupHook("End Extensions",function(){e[!1===c.explorer?"Disable":"Enable"](),MathJax.Hub.Startup.signal.Post("Explorer Ready"),MathJax.Hub.Register.StartupHook("MathMenu Ready",function(){d=MathJax.Menu.cookie;var a,b=function(a){e[c.explorer?"Enable":"Disable"](!0,!0),MathJax.Menu.saveCookie()},f=MathJax.Menu.ITEM,h=MathJax.Menu.menu,i={action:g.Reset},j={action:e.speechOption},k=f.SUBMENU(["Explorer","Explorer"],f.CHECKBOX(["Active","Active"],"explorer",{action:b}),f.RULE(),f.SUBMENU(["Walker","Walker"],f.RADIO(["nowalker","No walker"],"Assistive-walker",{value:"none"}),f.RADIO(["syntactic","Syntax walker"],"Assistive-walker"),f.RADIO(["semantic","Semantic walker"],"Assistive-walker")),f.SUBMENU(["Highlight","Highlight"],f.RADIO(["none","None"],"Assistive-highlight",i),f.RADIO(["hover","Hover"],"Assistive-highlight",i),f.RADIO(["flame","Flame"],"Assistive-highlight",i)),f.SUBMENU(["Background","Background"],f.RADIO(["blue","Blue"],"Assistive-background",i),f.RADIO(["red","Red"],"Assistive-background",i),f.RADIO(["green","Green"],"Assistive-background",i),f.RADIO(["yellow","Yellow"],"Assistive-background",i),f.RADIO(["cyan","Cyan"],"Assistive-background",i),f.RADIO(["magenta","Magenta"],"Assistive-background",i),f.RADIO(["white","White"],"Assistive-background",i),f.RADIO(["black","Black"],"Assistive-background",i)),f.SUBMENU(["Foreground","Foreground"],f.RADIO(["black","Black"],"Assistive-foreground",i),f.RADIO(["white","White"],"Assistive-foreground",i),f.RADIO(["magenta","Magenta"],"Assistive-foreground",i),f.RADIO(["cyan","Cyan"],"Assistive-foreground",i),f.RADIO(["yellow","Yellow"],"Assistive-foreground",i),f.RADIO(["green","Green"],"Assistive-foreground",i),f.RADIO(["red","Red"],"Assistive-foreground",i),f.RADIO(["blue","Blue"],"Assistive-foreground",i)),f.RULE(),f.CHECKBOX(["SpeechOutput","Speech Output"],"Assistive-speech",{action:g.SpeechOutput}),f.CHECKBOX(["Subtitles","Subtitles"],"Assistive-subtitle",{disabled:!c["Assistive-speech"]}),f.SUBMENU(["Generation","Generation"],{disabled:!c["Assistive-speech"]},f.RADIO(["eager","Eager"],"Assistive-generation",{action:g.Regenerate}),f.RADIO(["mixed","Mixed"],"Assistive-generation",{action:g.Regenerate}),f.RADIO(["lazy","Lazy"],"Assistive-generation",{action:g.Regenerate})),f.RULE(),f.SUBMENU(["Mathspeak","Mathspeak Rules"],f.RADIO(["mathspeak-default","Verbose"],"Assistive-ruleset",j),f.RADIO(["mathspeak-brief","Brief"],"Assistive-ruleset",j),f.RADIO(["mathspeak-sbrief","Superbrief"],"Assistive-ruleset",j)),f.SUBMENU(["Chromevox","ChromeVox Rules"],f.RADIO(["chromevox-default","Verbose"],"Assistive-ruleset",j),f.RADIO(["chromevox-short","Short"],"Assistive-ruleset",j),f.RADIO(["chromevox-alternative","Alternative"],"Assistive-ruleset",j))),l=(h.FindId("Accessibility")||{}).submenu;l?(a=l.IndexOfId("Explorer"),null!==a?l.items[a]=k:(a=l.IndexOfId("CollapsibleMath"),l.items.splice(a+1,0,k))):(a=h.IndexOfId("CollapsibleMath"),h.items.splice(a+1,0,k)),c.explorer||e.DisableMenus(!0)},20)},20)}),MathJax.Hub.Register.StartupHook("SVG Jax Ready",function(){MathJax.Hub.Config({SVG:{addMMLclasses:!0}});var a=MathJax.OutputJax.SVG;if(parseFloat(a.version)<2.7){var b=a.getJaxFromMath;a.Augment({getJaxFromMath:function(a){return a.parentNode.className.match(/MathJax_SVG_Display/)&&(a=a.parentNode),b.call(this,a)}})}}),MathJax.Ajax.config.path.a11y||(MathJax.Ajax.config.path.a11y=MathJax.Hub.config.root+"/extensions/a11y"),MathJax.Ajax.Require("[a11y]/collapsible.js"),MathJax.Hub.Register.StartupHook("Collapsible Ready",function(){MathJax.Extension.explorer.Explorer.Startup(),MathJax.Ajax.loadComplete("[a11y]/explorer.js")}); \ No newline at end of file diff --git a/extensions/a11y/invalid_keypress.mp3 b/extensions/a11y/invalid_keypress.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cba44de08a288ee4d5aae221b71b740349c0caad GIT binary patch literal 9030 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 WCEpm@S)lay>ms`WyLrxY(tiW58)c^e literal 0 HcmV?d00001 diff --git a/extensions/a11y/mathjax-sre.js b/extensions/a11y/mathjax-sre.js new file mode 100644 index 000000000..fa04c38a4 --- /dev/null +++ b/extensions/a11y/mathjax-sre.js @@ -0,0 +1,742 @@ +var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; +$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(a){return $jscomp.SYMBOL_PREFIX+(a||"")+$jscomp.symbolCounter_++}; +$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var b=0;return $jscomp.iteratorPrototype(function(){return b\x3c/script>')},goog.appendScriptSrcNode_=function(a){var b=goog.global.document,c=b.createElement("script");c.type="text/javascript";c.src= +a;c.defer=!1;c.async=!1;b.head.appendChild(c)},goog.writeScriptTag_=function(a,b){if(goog.inHtmlDocument_()){var c=goog.global.document;if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&"complete"==c.readyState){if(/\bdeps.js$/.test(a))return!1;throw Error('Cannot write "'+a+'" after document load');}if(void 0===b)if(goog.IS_OLD_IE_){goog.oldIeWaiting_=!0;var d=" onreadystatechange='goog.onScriptLoad_(this, "+ ++goog.lastNonModuleScriptIndex_+")' ";c.write('