Doc generation: add a method HTMLDocbookTagConverter::getGenerationType() to know...
[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  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.helptools.image;
14
15 import java.io.BufferedReader;
16 import java.io.File;
17 import java.io.FileReader;
18 import java.io.StringReader;
19 import java.io.IOException;
20 import java.util.Map;
21
22 import javax.swing.JLabel;
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
29 import org.scilab.modules.helptools.HTMLDocbookTagConverter;
30
31 /**
32  * A LaTeX to PNG converter
33  * @author Calixte DENIZET
34  */
35 public class LaTeXImageConverter implements ExternalImageConverter {
36
37     private static LaTeXImageConverter instance;
38     private final HTMLDocbookTagConverter.GenerationType type;
39
40     private LaTeXImageConverter(HTMLDocbookTagConverter.GenerationType type) {
41         this.type = type;
42     }
43
44     /**
45      * {@inheritDoc}
46      */
47     public String getMimeType() {
48         return "image/latex";
49     }
50
51     /**
52      * Since it is a singleton class...
53      * @return this
54      */
55     public static ExternalImageConverter getInstance(HTMLDocbookTagConverter.GenerationType type) {
56         if (instance == null) {
57             instance = new LaTeXImageConverter(type);
58         }
59         return instance;
60     }
61
62     /**
63      * {@inheritDoc}
64      */
65     public String convertToImage(String currentFile, String latex, Map<String, String> attributes, File imageFile, String imageName) {
66         TeXIcon icon = null;
67         try {
68             TeXFormula formula = new TeXFormula(latex);
69             String display = attributes.get("style");
70             int style = TeXConstants.STYLE_DISPLAY;
71             if (display != null && display.equals("text")) {
72                 style = TeXConstants.STYLE_TEXT;
73             }
74
75             icon = formula.createTeXIcon(style, Integer.parseInt(attributes.get("fontsize")));
76
77             Image img = new Image(icon, icon.getIconWidth(), icon.getIconHeight(), icon.getIconHeight() - icon.getIconDepth(), icon.getIconDepth());
78             if (img != null && ImageConverter.convertIconToPNG(img.icon, imageFile)) {
79                 return ImageConverter.generateCode(img, imageName, attributes);
80             }
81
82             return null;
83
84         } catch (ParseException e) {
85             System.err.println(e);
86         }
87
88         return null;
89     }
90
91     /**
92      * {@inheritDoc}
93      */
94     public String convertToImage(File latex, Map<String, String> attributes, File imageFile, String imageName) {
95         BufferedReader input = null;
96         StringBuilder buffer = new StringBuilder();
97         boolean ok = false;
98         try {
99             input = new BufferedReader(new FileReader(latex));
100             String line = null;
101             while ((line = input.readLine()) != null) {
102                 buffer.append(line);
103                 buffer.append("\n");
104             }
105             ok = true;
106         } catch (IOException e) {
107             System.err.println(e);
108         }
109         if (input != null) {
110             try {
111                 input.close();
112             } catch (IOException e) {
113                 System.err.println(e);
114             }
115         }
116
117         if (ok) {
118             return convertToImage(latex.getName(), buffer.toString(), attributes, imageFile, imageName);
119         }
120
121         return null;
122     }
123 }