3312108ebf661cae7ae084fda16828b7977ca825
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / image / LaTeXImageConverter.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 package org.scilab.modules.helptools.image;
17
18 import java.io.BufferedReader;
19 import java.io.File;
20 import java.io.FileReader;
21 import java.io.IOException;
22 import java.util.Map;
23
24 import org.scilab.forge.jlatexmath.TeXConstants;
25 import org.scilab.forge.jlatexmath.TeXFormula;
26 import org.scilab.forge.jlatexmath.TeXIcon;
27 import org.scilab.forge.jlatexmath.ParseException;
28 import org.scilab.modules.helptools.DocbookTagConverter;
29
30 /**
31  * A LaTeX to PNG converter
32  * @author Calixte DENIZET
33  */
34 public class LaTeXImageConverter implements ExternalImageConverter {
35
36     private final DocbookTagConverter conv;
37
38     public LaTeXImageConverter(DocbookTagConverter conv) {
39         this.conv = conv;
40     }
41
42     /**
43      * {@inheritDoc}
44      */
45     public String getMimeType() {
46         return "image/latex";
47     }
48
49     /**
50      * {@inheritDoc}
51      */
52     public boolean mustRegenerate() {
53         return true;
54     }
55
56     /**
57      * {@inheritDoc}
58      */
59     public String convertToImage(String currentFile, String latex, Map<String, String> attributes, File imageFile, String imageName) {
60         TeXIcon icon = null;
61         try {
62             TeXFormula formula = new TeXFormula(latex);
63             String display = attributes.get("style");
64             int style = TeXConstants.STYLE_DISPLAY;
65             if (display != null && display.equals("text")) {
66                 style = TeXConstants.STYLE_TEXT;
67             }
68             String fs = attributes.get("fontsize");
69             int ifs = 16;
70             if (fs != null) {
71                 try {
72                     ifs = Integer.parseInt(fs);
73                 } catch (Exception e) { }
74             }
75
76             icon = formula.createTeXIcon(style, ifs);
77
78             Image img = new Image(icon, icon.getIconWidth(), icon.getIconHeight(), icon.getIconHeight() - icon.getIconDepth(), icon.getIconDepth());
79             if (img != null && ImageConverter.convertIconToPNG(img.icon, imageFile)) {
80                 return conv.generateImageCode(img, conv.getBaseImagePath() + imageName, attributes);
81             }
82
83         } catch (ParseException e) {
84             System.err.println("LaTeX code in\n" + currentFile + "\nhas generated an error: " + e.getMessage());
85         }
86         return null;
87     }
88
89     /**
90      * {@inheritDoc}
91      */
92     public String convertToImage(File latex, Map<String, String> attributes, File imageFile, String imageName) {
93         BufferedReader input = null;
94         StringBuilder buffer = new StringBuilder();
95         boolean ok = false;
96         try {
97             input = new BufferedReader(new FileReader(latex));
98             String line = null;
99             while ((line = input.readLine()) != null) {
100                 buffer.append(line);
101                 buffer.append("\n");
102             }
103             ok = true;
104         } catch (IOException e) {
105             System.err.println(e);
106         }
107         if (input != null) {
108             try {
109                 input.close();
110             } catch (IOException e) {
111                 System.err.println(e);
112             }
113         }
114
115         if (ok) {
116             return convertToImage(latex.getName(), buffer.toString(), attributes, imageFile, imageName);
117         }
118
119         return null;
120     }
121 }