86 lines
2.8 KiB
JavaScript
86 lines
2.8 KiB
JavaScript
|
/* March 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation; either version 2 of the License, or (at
|
||
|
your option) any later version.
|
||
|
This program is distributed in the hope that it will be useful, but
|
||
|
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||
|
(at http://www.gnu.org/copyleft/gpl.html) for more details.*/
|
||
|
|
||
|
function convertMath(node) {// for Gecko
|
||
|
if (node.nodeType==1) {
|
||
|
var newnode =
|
||
|
document.createElementNS("http://www.w3.org/1998/Math/MathML",
|
||
|
node.nodeName.toLowerCase());
|
||
|
for(var i=0; i < node.attributes.length; i++) {
|
||
|
if (node.attributes[i].nodeName == 'displaystyle') {
|
||
|
newnode.setAttribute(node.attributes[i].nodeName,node.attributes[i].nodeValue);
|
||
|
}
|
||
|
}
|
||
|
for (var i=0; i<node.childNodes.length; i++) {
|
||
|
var st = node.childNodes[i].nodeValue;
|
||
|
if (st==null || st.slice(0,1)!=" " && st.slice(0,1)!="\n")
|
||
|
newnode.appendChild(convertMath(node.childNodes[i]));
|
||
|
}
|
||
|
return newnode;
|
||
|
}
|
||
|
else return node;
|
||
|
}
|
||
|
function convert() {
|
||
|
|
||
|
if (document.createElementNS) {
|
||
|
var mmlnode = document.getElementsByTagName("span");
|
||
|
|
||
|
for (var i=0; i<mmlnode.length; i++) {
|
||
|
var tmp_node = mmlnode[i];
|
||
|
if (tmp_node.className == 'asciimath') {
|
||
|
tmp_node.replaceChild(convertMath(tmp_node.firstChild),tmp_node.firstChild);
|
||
|
/*
|
||
|
for (var j=0;j<tmp_node.childNodes.length;j++) {
|
||
|
if (tmp_node.childNodes[j].nodeType != 3) {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
var st,node,newnode;
|
||
|
var mmlnode = document.getElementsByTagName("math");
|
||
|
|
||
|
for (var i=0; i<mmlnode.length; i++) {
|
||
|
var str = "";
|
||
|
node = mmlnode[i];
|
||
|
while (node.nodeName!="/MATH" && node.nextSibling) {
|
||
|
st = node.nodeName.toLowerCase();
|
||
|
if (st=="#text") {
|
||
|
str += node.nodeValue;
|
||
|
} else {
|
||
|
str += (st.slice(0,1)=="/" ? "</m:"+st.slice(1) : "<m:"+st);
|
||
|
if (st.slice(0,1)!="/") {
|
||
|
for(var j=0; j < node.attributes.length; j++) {
|
||
|
if (node.attributes[j].nodeValue!="italic" &&
|
||
|
node.attributes[j].nodeValue!="" &&
|
||
|
node.attributes[j].nodeValue!="inherit" &&
|
||
|
node.attributes[j].nodeValue!=undefined) {
|
||
|
str += " "+node.attributes[j].nodeName+"="+
|
||
|
"\""+node.attributes[j].nodeValue+"\"";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
str += ">";
|
||
|
}
|
||
|
node = node.nextSibling;
|
||
|
node.parentNode.removeChild(node.previousSibling);
|
||
|
}
|
||
|
|
||
|
if (str != '') {
|
||
|
str += "</m:math>";
|
||
|
newnode = document.createElement("span");
|
||
|
node.parentNode.replaceChild(newnode,node);
|
||
|
newnode.innerHTML = str;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|