use of us.parr.bookish.model.EqnVar in project bookish by parrt.
the class Translator method visitEqn.
@Override
public OutputModelObject visitEqn(BookishParser.EqnContext ctx) {
String eqn = stripQuotes(ctx.getText());
if (target == Tool.Target.LATEX || target == Tool.Target.LATEX_BOOK) {
return new InlineEquation(null, eqn, -1, -1);
}
// check for special cases like $w$ and $\mathbf{w}_i$.
List<String> elements = extract(eqnVarPattern, eqn);
if (elements.size() > 0) {
return new EqnVar(elements.get(0));
}
elements = extract(eqnVecVarPattern, eqn);
if (elements.size() > 0) {
return new EqnVecVar(elements.get(0));
}
elements = extract(eqnVecVarPattern2, eqn);
if (elements.size() > 0) {
return new EqnVecVar(elements.get(0));
}
elements = extract(eqnIndexedVarPattern, eqn);
if (elements.size() > 0) {
return new EqnIndexedVar(elements.get(0), elements.get(1));
}
elements = extract(eqnIndexedVecVarPattern, eqn);
if (elements.size() > 0) {
return new EqnIndexedVecVar(elements.get(0), elements.get(1));
}
elements = extract(eqnIndexedVecVarPattern2, eqn);
if (elements.size() > 0) {
return new EqnIndexedVecVar(elements.get(0), elements.get(1));
}
float height = 0, depth = 0;
String prefix = String.format("eqn-%s", md5hash(eqn));
// String prefix = String.format("images/eqn-%s",hash(eqn));
File[] files = new File(outputDir + "/images").listFiles((dir, name) -> name.startsWith(prefix));
String existing = null;
if (files != null && files.length > 0) {
existing = files[0].getName();
int i = existing.indexOf("-depth");
int j = existing.indexOf(".svg", i);
String depthS = existing.substring(i + "-depth".length(), j);
depth = Float.parseFloat(depthS);
return new InlineEquation("images/" + existing, eqn, -1, depth);
}
Triple<String, Float, Float> results = texConverter.tex2svg(eqn, Tex2SVG.LatexType.EQN, INLINE_EQN_FONT_SIZE);
String svg = results.a;
height = results.b;
depth = results.c;
try {
String src = String.format("%s/images/%s-depth%06.2f.svg", outputDir, prefix, depth);
Path outpath = Paths.get(src);
System.out.println(outpath);
Files.write(outpath, svg.getBytes());
String relativePath = String.format("images/%s-depth%06.2f.svg", prefix, depth);
return new InlineEquation(relativePath, eqn, height, depth);
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
Aggregations