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}