package org.eclipse.iee.pad.formula;
import java.io.StringWriter;
import org.apache.log4j.Logger;
import org.matheclipse.core.eval.EvalEngine;
import org.matheclipse.core.eval.EvalUtilities;
import org.matheclipse.core.eval.TeXUtilities;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.form.output.OutputFormFactory;
import org.matheclipse.core.form.output.StringBufferWriter;
import org.matheclipse.core.interfaces.IExpr;
import org.osgi.service.component.annotations.Component;
@Component(service = SymbolicEngine.class)
public class SymbolicEngine {
private final EvalUtilities fUtil;
private static final Logger logger = Logger.getLogger(SymbolicEngine.class);
public SymbolicEngine() {
F.initSymbols(null);
fUtil = new EvalUtilities();
}
public static boolean validate(String text) {
try {
if (getTeX(text) == "") {
return false;
} else {
return true;
}
} catch (Exception e) {
return false;
}
}
public String getOutput(String expression) {
String output = "";
IExpr result = null;
StringBufferWriter buf = new StringBufferWriter();
logger.debug("expression: " + expression);
try {
result = fUtil.evaluate(expression);
OutputFormFactory.get().convert(buf, result);
output = buf.toString();
logger.debug("result: " + output);
} catch (Exception e) {
e.printStackTrace();
return "";
}
return output.replaceAll("->", "=");
}
public static String getTeX(String expression) {
/* Convert to TeX */
EvalEngine engine = new EvalEngine();
TeXUtilities texUtil = new TeXUtilities(engine);
StringWriter stw = new StringWriter();
texUtil.toTeX(expression, stw);
String output = stw.toString();
return output;
}
}