⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asciimathml.js

📁 数值计算方法网络课件系统是浙江大学过程装备与控制工程专业2001级本科生毕业设计成果。本系统采用ASP+ACCESS架构
💻 JS
📖 第 1 页 / 共 3 页
字号:
//arrows{input:"uarr", tag:"mo", output:"\u2191", tex:"uparrow", ttype:CONST},{input:"darr", tag:"mo", output:"\u2193", tex:"downarrow", ttype:CONST},{input:"rarr", tag:"mo", output:"\u2192", tex:"rightarrow", ttype:CONST},{input:"->",   tag:"mo", output:"\u2192", tex:"to", ttype:CONST},{input:"|->",  tag:"mo", output:"\u21A6", tex:"mapsto", ttype:CONST},{input:"larr", tag:"mo", output:"\u2190", tex:"leftarrow", ttype:CONST},{input:"harr", tag:"mo", output:"\u2194", tex:"leftrightarrow", ttype:CONST},{input:"rArr", tag:"mo", output:"\u21D2", tex:"Rightarrow", ttype:CONST},{input:"lArr", tag:"mo", output:"\u21D0", tex:"Leftarrow", ttype:CONST},{input:"hArr", tag:"mo", output:"\u21D4", tex:"Leftrightarrow", ttype:CONST},//commands with argumentAMsqrt, AMroot, AMfrac, AMdiv, AMover, AMsub, AMsup,{input:"hat", tag:"mover", output:"\u005E", tex:null, ttype:UNARY, acc:true},{input:"bar", tag:"mover", output:"\u00AF", tex:"overline", ttype:UNARY, acc:true},{input:"vec", tag:"mover", output:"\u2192", tex:null, ttype:UNARY, acc:true},{input:"dot", tag:"mover", output:".",      tex:null, ttype:UNARY, acc:true},{input:"ddot", tag:"mover", output:"..",    tex:null, ttype:UNARY, acc:true},{input:"ul", tag:"munder", output:"\u0332", tex:"underline", ttype:UNARY, acc:true},AMtext, AMmbox, AMquote,{input:"bb", tag:"mstyle", atname:"fontweight", atval:"bold", output:"bb", tex:null, ttype:UNARY},{input:"mathbf", tag:"mstyle", atname:"fontweight", atval:"bold", output:"mathbf", tex:null, ttype:UNARY},{input:"sf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"sf", tex:null, ttype:UNARY},{input:"mathsf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"mathsf", tex:null, ttype:UNARY},{input:"bbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"bbb", tex:null, ttype:UNARY, codes:AMbbb},{input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},{input:"cc",  tag:"mstyle", atname:"mathvariant", atval:"script", output:"cc", tex:null, ttype:UNARY, codes:AMcal},{input:"mathcal", tag:"mstyle", atname:"mathvariant", atval:"script", output:"mathcal", tex:null, ttype:UNARY, codes:AMcal},{input:"tt",  tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"tt", tex:null, ttype:UNARY},{input:"mathtt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"mathtt", tex:null, ttype:UNARY},{input:"fr",  tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"fr", tex:null, ttype:UNARY, codes:AMfrk},{input:"mathfrak",  tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"mathfrak", tex:null, ttype:UNARY, codes:AMfrk}];function compareNames(s1,s2) {  if (s1.input > s2.input) return 1  else return -1;}var AMnames = []; //list of input symbolsfunction AMinitSymbols() {  var texsymbols = [], i;  for (i=0; i<AMsymbols.length; i++)    if (AMsymbols[i].tex)       texsymbols[texsymbols.length] = {input:AMsymbols[i].tex,         tag:AMsymbols[i].tag, output:AMsymbols[i].output, ttype:AMsymbols[i].ttype};  AMsymbols = AMsymbols.concat(texsymbols);  AMsymbols.sort(compareNames);  for (i=0; i<AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;}var AMmathml = "http://www.w3.org/1998/Math/MathML";function AMcreateElementMathML(t) {  if (isIE) return document.createElement("mml:"+t);  else return document.createElementNS(AMmathml,t);}function AMcreateMmlNode(name,frag) {  var node = AMcreateElementMathML(name);  node.appendChild(frag);  return node;}function AMremoveCharsAndBlanks(str,n) {//remove n characters and any following blanks  var st;  if (str.charAt(n)=="\\" && str.charAt(n+1)!="\\" && str.charAt(n+1)!=" ")     st = str.slice(n+1);  else st = str.slice(n);  for (var i=0; i<st.length && st.charCodeAt(i)<=32; i=i+1);  return st.slice(i);}function AMposition(arr, str, n) { // return position >=n where str appears or would be inserted// assumes arr is sorted  if (n==0) {    var h,m;    n = -1;    h = arr.length;    while (n+1<h) {      m = (n+h) >> 1;      if (arr[m]<str) n = m; else h = m;    }    return h;  } else    for (var i=n; i<arr.length && arr[i]<str; i++);  return i; // i=arr.length || arr[i]>=str}var AMseparated = true;function AMgetSymbol(str) {//return maximal initial substring of str that appears in names//return null if there is none  var k = 0; //new pos  var j = 0; //old pos  var mk; //match pos  var st;  var tagst;  var match = "";  var more = true;  for (var i=1; i<=str.length && more; i++) {    st = str.slice(0,i); //initial substring of length i    j = k;    k = AMposition(AMnames, st, j);    if (k<AMnames.length && str.slice(0,AMnames[k].length)==AMnames[k]){      match = AMnames[k];      mk = k;      i = match.length;    }    more = k<AMnames.length && str.slice(0,AMnames[k].length)>=AMnames[k];  }  if (match!="")    if (separatetokens) {      i = match.length;      if ("a">str.charAt(0) || str.charAt(0)>"z" ||         "a">str.charAt(i-1) || str.charAt(i-1)>"z") {        AMseparated = true;        return AMsymbols[mk];      }      st = str.charAt(i);      AMseparated = AMseparated && ("a">st || st>"z");      if (AMseparated) return AMsymbols[mk];    } else return AMsymbols[mk]; // if str[0] is a digit or - return maxsubstring of digits.digits  k = 1;  st = str.slice(0,1);  var pos = true;  var integ = true;  if (st == "-") {    pos = false;    st = str.slice(k,k+1);    k++;  }  while ("0"<=st && st<="9" && k<=str.length) {    st = str.slice(k,k+1);    k++;  }  if (st == ".") {    integ = false;    st = str.slice(k,k+1);    k++;    while ("0"<=st && st<="9" && k<=str.length) {      st = str.slice(k,k+1);      k++;    }  }  if ((pos && integ && k>1) || ((pos || integ) && k>2) || k>3) {    st = str.slice(0,k-1);    tagst = "mn";    AMseparated = true;  } else {    k = 2;    st = str.slice(0,1); //take 1 character    AMseparated = ("A">st || st>"Z") && ("a">st || st>"z");    tagst = (AMseparated?"mo":"mi");    AMseparated = AMseparated || str.charAt(1)<"a" || str.charAt(1)>"z";  }  return {input:str.slice(0,k-1), tag:tagst, output:st, ttype:CONST};}function AMremoveBrackets(node) {  var st;  if (node.nodeName=="mrow") {    st = node.firstChild.firstChild.nodeValue;    if (st=="(" || st=="[" || st=="{") node.removeChild(node.firstChild);  }  if (node.nodeName=="mrow") {    st = node.lastChild.firstChild.nodeValue;    if (st==")" || st=="]" || st=="}") node.removeChild(node.lastChild);  }}/*Parsing ASCII math expressions with the following grammarV ::= [A-Za-z] | greek letters | numbers | other constant symbolsU ::= sqrt | text | bb | other unary symbols for font commandsB ::= frac | root | stackrel         binary symbolsL ::= ( | [ | { | (: | {:            left bracketsR ::= ) | ] | } | :) | :}            right bracketsS ::= V | LER | US | BSS             simple expressionE ::= SE | S/S | S_S | S^S | S_S^S   expressionEach terminal symbol is translated into a corresponding mathml node.*/var AMnestingDepth;function AMparseSexpr(str) { //parses str and returns [node,tailstr]  var symbol, node, result, i, st, newFrag = document.createDocumentFragment();  str = AMremoveCharsAndBlanks(str,0);  symbol = AMgetSymbol(str);             //either a token or a bracket or empty  if (symbol == null || symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0)    return [null,str];  if (symbol.ttype == DEFINITION) {    str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);     symbol = AMgetSymbol(str);  }  switch (symbol.ttype) {  case UNDEROVER:  case CONST:    str = AMremoveCharsAndBlanks(str,symbol.input.length);     if (symbol.tag=="mn" && symbol.output.charAt(0)=="-") {      node = AMcreateMmlNode("mo",document.createTextNode("-"));      node = AMcreateMmlNode("mrow",node);      node.appendChild(AMcreateMmlNode(symbol.tag,        //its a constant                             document.createTextNode(symbol.output.slice(1))));      return [node,str];    } else    return [AMcreateMmlNode(symbol.tag,        //its a constant                             document.createTextNode(symbol.output)),str];  case LEFTBRACKET:   //read (expr+)    AMnestingDepth++;    str = AMremoveCharsAndBlanks(str,symbol.input.length);     result = AMparseExpr(str);    if (typeof symbol.invisible == "boolean" && symbol.invisible)       node = AMcreateMmlNode("mrow",result[0]);    else {      node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));      node = AMcreateMmlNode("mrow",node);      node.appendChild(result[0]);    }    return [node,result[1]];  case UNARY:    if (symbol == AMtext || symbol == AMmbox || symbol == AMquote) {      if (symbol!=AMquote) str = AMremoveCharsAndBlanks(str,symbol.input.length);      if (str.charAt(0)=="{") i=str.indexOf("}");      else if (str.charAt(0)=="(") i=str.indexOf(")");      else if (str.charAt(0)=="[") i=str.indexOf("]");      else if (symbol==AMquote) i=str.slice(1).indexOf("\"")+1;      else i = 0;      if (i==-1) i = str.length;      st = str.slice(1,i);      if (st.charAt(0) == " ") {        node = AMcreateElementMathML("mspace");        node.setAttribute("width","1ex");        newFrag.appendChild(node);      }      newFrag.appendChild(        AMcreateMmlNode(symbol.tag,document.createTextNode(st)));      if (st.charAt(st.length-1) == " ") {        node = AMcreateElementMathML("mspace");        node.setAttribute("width","1ex");        newFrag.appendChild(node);      }      str = AMremoveCharsAndBlanks(str,i+1);      return [AMcreateMmlNode("mrow",newFrag),str];    } else {      str = AMremoveCharsAndBlanks(str,symbol.input.length);       result = AMparseSexpr(str);      if (result[0]==null) return [AMcreateMmlNode("mo",                             document.createTextNode(symbol.input)),str];      AMremoveBrackets(result[0]);      if (symbol == AMsqrt) {           // sqrt        return [AMcreateMmlNode(symbol.tag,result[0]),result[1]];      } else if (typeof symbol.acc == "boolean" && symbol.acc) {   // accent        node = AMcreateMmlNode(symbol.tag,result[0]);        node.appendChild(AMcreateMmlNode("mo",document.createTextNode(symbol.output)));        return [node,result[1]];      } else {                        // font change command

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -