Search in sources :

Example 1 with InlineEquation

use of us.parr.bookish.model.InlineEquation 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;
}
Also used : Path(java.nio.file.Path) XPath(org.antlr.v4.runtime.tree.xpath.XPath) IOException(java.io.IOException) EqnVar(us.parr.bookish.model.EqnVar) EqnIndexedVecVar(us.parr.bookish.model.EqnIndexedVecVar) EqnVecVar(us.parr.bookish.model.EqnVecVar) InlineEquation(us.parr.bookish.model.InlineEquation) STGroupFile(org.stringtemplate.v4.STGroupFile) File(java.io.File) EqnIndexedVar(us.parr.bookish.model.EqnIndexedVar)

Aggregations

File (java.io.File)1 IOException (java.io.IOException)1 Path (java.nio.file.Path)1 XPath (org.antlr.v4.runtime.tree.xpath.XPath)1 STGroupFile (org.stringtemplate.v4.STGroupFile)1 EqnIndexedVar (us.parr.bookish.model.EqnIndexedVar)1 EqnIndexedVecVar (us.parr.bookish.model.EqnIndexedVecVar)1 EqnVar (us.parr.bookish.model.EqnVar)1 EqnVecVar (us.parr.bookish.model.EqnVecVar)1 InlineEquation (us.parr.bookish.model.InlineEquation)1