0ea2b10c3c02b9f3d54291e50fe588dc708aa72f
[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 /**
30  * A LaTeX to PNG converter
31  * @author Calixte DENIZET
32  */
33 public class LaTeXImageConverter implements ExternalImageConverter {
34
35     private static LaTeXImageConverter instance;
36
37     private LaTeXImageConverter() { }
38
39     /**
40      * {@inheritDoc}
41      */
42     public String getMimeType() {
43         return "image/latex";
44     }
45
46     /**
47      * Since it is a singleton class...
48      * @return this
49      */
50     public static ExternalImageConverter getInstance() {
51         if (instance == null) {
52             instance = new LaTeXImageConverter();
53         }
54         return instance;
55     }
56
57     /**
58      * {@inheritDoc}
59      */
60     public String convertToImage(String currentFile, String latex, Map<String, String> attributes, File imageFile, String imageName) {
61         TeXIcon icon = null;
62         try {
63             TeXFormula formula = new TeXFormula(latex);
64             String display = attributes.get("style");
65             int style = TeXConstants.STYLE_DISPLAY;
66             if (display != null && display.equals("text")) {
67                 style = TeXConstants.STYLE_TEXT;
68             }
69
70             icon = formula.createTeXIcon(style, Integer.parseInt(attributes.get("fontsize")));
71
72             Image img = new Image(icon, icon.getIconWidth(), icon.getIconHeight(), icon.getIconHeight() - icon.getIconDepth(), icon.getIconDepth());
73             if (img != null && ImageConverter.convertIconToPNG(img.icon, imageFile)) {
74                 return ImageConverter.generateCode(img, imageName, attributes);
75             }
76
77             return null;
78
79         } catch (ParseException e) {
80             System.err.println(e);
81         }
82
83         return null;
84     }
85
86     /**
87      * {@inheritDoc}
88      */
89     public String convertToImage(File latex, Map<String, String> attributes, File imageFile, String imageName) {
90         BufferedReader input = null;
91         StringBuilder buffer = new StringBuilder();
92         boolean ok = false;
93         try {
94             input = new BufferedReader(new FileReader(latex));
95             String line = null;
96             while ((line = input.readLine()) != null) {
97                 buffer.append(line);
98                 buffer.append("\n");
99             }
100             ok = true;
101         } catch (IOException e) {
102             System.err.println(e);
103         }
104         if (input != null) {
105             try {
106                 input.close();
107             } catch (IOException e) {
108                 System.err.println(e);
109             }
110         }
111
112         if (ok) {
113             return convertToImage(latex.getName(), buffer.toString(), attributes, imageFile, imageName);
114         }
115
116         return null;
117     }
118 }