package org.geogebra.desktop.gui.util;
import java.io.File;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.geogebra.common.util.debug.Log;
public class OOMLConverter {
public static String oomlToMathml(String oomlRaw) {
TransformerFactory factory = TransformerFactory.newInstance();
String ooml = oomlRaw.replaceAll("<i[^>]*>", "")
.replaceAll("<span[^>]*>", "")
.replace("</i>", "").replace("</span>", "")
.replace("<m:r>", "<m:r><m:t>")
.replace("</m:r>", "</m:t></m:r>");
Log.debug(ooml);
Source xmlFile = new StreamSource(new StringReader(
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<w:document xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" "
+ "xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\""
+ "><w:body><w:p>" + ooml
+ "</w:p></w:body></w:document>"));
try {
File ssFile = new File(
"C:\\Program Files\\Microsoft Office 15\\root\\office15\\OMML2MML.XSL");
if (!ssFile.exists()) {
ssFile = new File(
"C:\\Program Files\\Microsoft Office\\Office14\\OMML2MML.XSL");
}
Source stylesheet = new StreamSource(ssFile);
Transformer transformer = factory.newTransformer(stylesheet);
StringWriter writer = new StringWriter();
Result output = new StreamResult(writer);
transformer.transform(xmlFile, output);
String xml = writer.toString();
return xml.substring(xml.indexOf('>') + 1).replace("mml:", "");
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
}