📄 asciimathml.js
字号:
if (!isIE && typeof symbol.codes != "undefined") { for (i=0; i<result[0].childNodes.length; i++) if (result[0].childNodes[i].nodeName=="mi" || result[0].nodeName=="mi") { st = (result[0].nodeName=="mi"?result[0].firstChild.nodeValue: result[0].childNodes[i].firstChild.nodeValue); var newst = []; for (var j=0; j<st.length; j++) if (st.charCodeAt(j)>64 && st.charCodeAt(j)<91) newst = newst + String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]); else newst = newst + st.charAt(j); if (result[0].nodeName=="mi") result[0]=AMcreateElementMathML("mo"). appendChild(document.createTextNode(newst)); else result[0].replaceChild(AMcreateElementMathML("mo"). appendChild(document.createTextNode(newst)),result[0].childNodes[i]); } } node = AMcreateMmlNode(symbol.tag,result[0]); node.setAttribute(symbol.atname,symbol.atval); return [node,result[1]]; } } case BINARY: str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseSexpr(str); if (result[0]==null) return [AMcreateMmlNode("mo", document.createTextNode(symbol.input)),str]; AMremoveBrackets(result[0]); var result2 = AMparseSexpr(result[1]); if (result2[0]==null) return [AMcreateMmlNode("mo", document.createTextNode(symbol.input)),str]; AMremoveBrackets(result2[0]); if (symbol==AMroot || symbol==AMover) newFrag.appendChild(result2[0]); newFrag.appendChild(result[0]); if (symbol==AMfrac) newFrag.appendChild(result2[0]); return [AMcreateMmlNode(symbol.tag,newFrag),result2[1]]; case INFIX: str = AMremoveCharsAndBlanks(str,symbol.input.length); return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)),str]; case SPACE: str = AMremoveCharsAndBlanks(str,symbol.input.length); node = AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); newFrag.appendChild( AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output))); node = AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); return [AMcreateMmlNode("mrow",newFrag),str]; default: str = AMremoveCharsAndBlanks(str,symbol.input.length); return [AMcreateMmlNode(symbol.tag, //its a constant document.createTextNode(symbol.output)),str]; }}function AMparseExpr(str) { var symbol, sym1, sym2, node, result, i, underover, nodeList = [], newFrag = document.createDocumentFragment(); do { str = AMremoveCharsAndBlanks(str,0); sym1 = AMgetSymbol(str); result = AMparseSexpr(str); node = result[0]; str = result[1]; symbol = AMgetSymbol(str); if (symbol.ttype == INFIX) { str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseSexpr(str); if (result[0] == null) result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1")); else AMremoveBrackets(result[0]); str = result[1]; if (symbol == AMdiv) AMremoveBrackets(node); if (symbol == AMsub) { sym2 = AMgetSymbol(str); underover = (sym1.ttype == UNDEROVER); if (sym2 == AMsup) { str = AMremoveCharsAndBlanks(str,sym2.input.length); var res2 = AMparseSexpr(str); AMremoveBrackets(res2[0]); str = res2[1]; node = AMcreateMmlNode((underover?"munderover":"msubsup"),node); node.appendChild(result[0]); node.appendChild(res2[0]); node = AMcreateMmlNode("mrow",node); // so sum does not stretch } else { node = AMcreateMmlNode((underover?"munder":"msub"),node); node.appendChild(result[0]); } } else { node = AMcreateMmlNode(symbol.tag,node); node.appendChild(result[0]); } newFrag.appendChild(node); } else if (node!=undefined) newFrag.appendChild(node); } while ((symbol.ttype != RIGHTBRACKET || AMnestingDepth == 0) && symbol!=null && symbol.output!=""); if (symbol.ttype == RIGHTBRACKET) { if (AMnestingDepth > 0) AMnestingDepth--; var len = newFrag.childNodes.length; if (len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 && newFrag.childNodes[len-2].nodeName == "mo" && newFrag.childNodes[len-2].firstChild.nodeValue == ",") { //matrix var right = newFrag.childNodes[len-1].lastChild.firstChild.nodeValue; if (right==")" || right=="]") { var left = newFrag.childNodes[len-1].firstChild.firstChild.nodeValue; if (left=="(" && right==")" && symbol.output != "}" || left=="[" && right=="]") { var pos = []; // positions of commas var matrix = true; var m = newFrag.childNodes.length; for (i=0; matrix && i<m; i=i+2) { pos[i] = []; node = newFrag.childNodes[i]; if (matrix) matrix = node.nodeName=="mrow" && (i==m-1 || node.nextSibling.nodeName=="mo" && node.nextSibling.firstChild.nodeValue==",")&& node.firstChild.firstChild.nodeValue==left && node.lastChild.firstChild.nodeValue==right; if (matrix) for (var j=0; j<node.childNodes.length; j++) if (node.childNodes[j].firstChild.nodeValue==",") pos[i][pos[i].length]=j; if (matrix && i>1) matrix = pos[i].length == pos[i-2].length; } if (matrix) { var row, frag, n, k, table = document.createDocumentFragment(); for (i=0; i<m; i=i+2) { row = document.createDocumentFragment(); frag = document.createDocumentFragment(); node = newFrag.firstChild; // <mrow>(-,-,...,-,-)</mrow> n = node.childNodes.length; k = 0; node.removeChild(node.firstChild); //remove ( for (j=1; j<n-1; j++) { if (typeof pos[i][k] != "undefined" && j==pos[i][k]){ node.removeChild(node.firstChild); //remove , row.appendChild(AMcreateMmlNode("mtd",frag)); k++; } else frag.appendChild(node.firstChild); } row.appendChild(AMcreateMmlNode("mtd",frag)); if (newFrag.childNodes.length>2) { newFrag.removeChild(newFrag.firstChild); //remove <mrow>)</mrow> newFrag.removeChild(newFrag.firstChild); //remove <mo>,</mo> } table.appendChild(AMcreateMmlNode("mtr",row)); } node = AMcreateMmlNode("mtable",table); if (typeof symbol.invisible == "boolean" && symbol.invisible) node.setAttribute("columnalign","left"); newFrag.replaceChild(node,newFrag.firstChild); } } } } str = AMremoveCharsAndBlanks(str,symbol.input.length); if (typeof symbol.invisible != "boolean" || !symbol.invisible) { node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); newFrag.appendChild(node); } } return [newFrag,str];}function AMparseMath(str) { var result, node = AMcreateElementMathML("mstyle"); if (mathcolor != "") node.setAttribute("mathcolor",mathcolor); if (displaystyle) node.setAttribute("displaystyle","true"); if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily); AMnestingDepth = 0; node.appendChild(AMparseExpr(str.replace(/^\s+/g,""))[0]); node = AMcreateMmlNode("math",node); if (mathfontfamily != "") { var fnode = AMcreateElementXHTML("font"); fnode.setAttribute("face",mathfontfamily); fnode.appendChild(node); return fnode; } return node;}function AMstrarr2docFrag(arr, linebreaks) { var newFrag=document.createDocumentFragment(); var expr = false; for (var i=0; i<arr.length; i++) { if (expr) newFrag.appendChild(AMparseMath(arr[i])); else { var arri = (linebreaks ? arr[i].split("\n\n") : [arr[i]]); newFrag.appendChild(AMcreateElementXHTML("span"). appendChild(document.createTextNode(arri[0]. replace(/AMescape2/g,AMdelimiter2).replace(/AMescape1/g,AMdelimiter1)))); for (var j=1; j<arri.length; j++) { newFrag.appendChild(AMcreateElementXHTML("p")); newFrag.appendChild(AMcreateElementXHTML("span"). appendChild(document.createTextNode(arri[j]. replace(/AMescape2/g,AMdelimiter2). replace(/AMescape1/g,AMdelimiter1)))); } } expr = !expr; } return newFrag;}function AMprocessNode(n, linebreaks) { var mtch, str, arr; if (n.childNodes.length == 0 && (n.nodeType!=8 || linebreaks) && n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" && n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE") { str = n.nodeValue; if (!(str == null)) { str = str.replace(/\r\n\r\n/g,"\n\n"); if (doubleblankmathdelimiter) { str = str.replace(/\x20\x20\./g," "+AMdelimiter1+"."); str = str.replace(/\x20\x20,/g," "+AMdelimiter1+","); str = str.replace(/\x20\x20/g," "+AMdelimiter1+" "); } str = str.replace(/\x20+/g," "); str = str.replace(/\s*\r\n/g," "); mtch = false; str = str.replace(new RegExp(AMescape2, "g"), function(st){mtch=true;return "AMescape2"}); str = str.replace(new RegExp(AMescape1, "g"), function(st){mtch=true;return "AMescape1"}); str = str.replace(new RegExp(AMdelimiter2regexp, "g"),AMdelimiter1); arr = str.split(AMdelimiter1); if (arr.length>1 || mtch) { if (checkForMathML) { checkForMathML = false; var nd = AMisMathMLavailable(); AMnoMathML = nd != null if (AMnoMathML && notifyIfNoMathML) AMbody.insertBefore(nd,AMbody.childNodes[0]); } if (!AMnoMathML) n.parentNode.replaceChild(AMstrarr2docFrag(arr,n.nodeType==8),n); } } } else if (n.nodeName!="math") for (var i=0; i<n.childNodes.length; i++) AMprocessNode(n.childNodes[i], linebreaks);}var AMbody;var AMnoMathML = false;function translate() { AMinitSymbols(); AMbody = document.getElementsByTagName("body")[0]; AMprocessNode(AMbody, false); if (isIE) { //needed to match size and font of formula to surrounding text var frag = document.getElementsByTagName('math'); for (var i=0;i<frag.length;i++) frag[i].update() }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -