190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* March 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen 290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberThis program is free software; you can redistribute it and/or modify 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberit under the terms of the GNU General Public License as published by 490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberthe Free Software Foundation; either version 2 of the License, or (at 590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberyour option) any later version. 690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberThis program is distributed in the hope that it will be useful, but 790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberor FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber(at http://www.gnu.org/copyleft/gpl.html) for more details.*/ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfunction convertMath(node) {// for Gecko 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (node.nodeType==1) { 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var newnode = 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber document.createElementNS("http://www.w3.org/1998/Math/MathML", 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.nodeName.toLowerCase()); 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for(var i=0; i < node.attributes.length; i++) { 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (node.attributes[i].nodeName == 'displaystyle') { 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber newnode.setAttribute(node.attributes[i].nodeName,node.attributes[i].nodeValue); 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for (var i=0; i<node.childNodes.length; i++) { 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var st = node.childNodes[i].nodeValue; 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n") 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber newnode.appendChild(convertMath(node.childNodes[i])); 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return newnode; 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber else return node; 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfunction convert() { 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (document.createElementNS) { 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var mmlnode = document.getElementsByTagName("span"); 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for (var i=0; i<mmlnode.length; i++) { 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var tmp_node = mmlnode[i]; 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (tmp_node.className == 'asciimath') { 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber tmp_node.replaceChild(convertMath(tmp_node.firstChild),tmp_node.firstChild); 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber /* 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for (var j=0;j<tmp_node.childNodes.length;j++) { 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (tmp_node.childNodes[j].nodeType != 3) { 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } else { 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var st,node,newnode; 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var mmlnode = document.getElementsByTagName("math"); 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for (var i=0; i<mmlnode.length; i++) { 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber var str = ""; 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node = mmlnode[i]; 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber while (node.nodeName!="/MATH" && node.nextSibling) { 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber st = node.nodeName.toLowerCase(); 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (st=="#text") { 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str += node.nodeValue; 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } else { 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str += (st.slice(0,1)=="/" ? "</m:"+st.slice(1) : "<m:"+st); 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (st.slice(0,1)!="/") { 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for(var j=0; j < node.attributes.length; j++) { 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (node.attributes[j].nodeValue!="italic" && 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.attributes[j].nodeValue!="" && 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.attributes[j].nodeValue!="inherit" && 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.attributes[j].nodeValue!=undefined) { 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str += " "+node.attributes[j].nodeName+"="+ 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "\""+node.attributes[j].nodeValue+"\""; 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str += ">"; 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node = node.nextSibling; 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.parentNode.removeChild(node.previousSibling); 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (str != '') { 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str += "</m:math>"; 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber newnode = document.createElement("span"); 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber node.parentNode.replaceChild(newnode,node); 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber newnode.innerHTML = str; 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}