Help generation: add the ability to generate an image from inlined Scilab code
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / external / HTMLMathMLHandler.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.external;
14
15 import java.io.File;
16 import java.util.HashMap;
17 import java.util.Map;
18
19 import org.xml.sax.Attributes;
20
21 import org.scilab.modules.helptools.image.ImageConverter;
22
23 /**
24  * Handle the included SVG code
25  * @author Calixte DENIZET
26  */
27 public class HTMLMathMLHandler extends ExternalXMLHandler {
28
29     private static final String MATH = "math";
30     private static final String BASENAME = "Equation_MathML_";
31
32     private static HTMLMathMLHandler instance;
33
34     private int compt;
35     private StringBuilder buffer = new StringBuilder(8192);
36     private String baseDir;
37     private String outputDir;
38
39     /**
40      * Constructor
41      * @param baseDir the base directory where to put the generated images
42      */
43     private HTMLMathMLHandler(String outputDir, String baseDir) {
44         this.outputDir = outputDir + File.separator + baseDir;
45         this.baseDir = baseDir + "/";
46     }
47
48     public static HTMLMathMLHandler getInstance(String outputDir, String baseDir) {
49         if (instance == null) {
50             instance = new HTMLMathMLHandler(outputDir, baseDir);
51         }
52
53         return instance;
54     }
55
56     /**
57      * {@inheritDoc}
58      */
59     public String getURI() {
60         return "http://www.w3.org/1998/Math/MathML";
61     }
62
63     /**
64      * {@inheritDoc}
65      */
66     public StringBuilder startExternalXML(String localName, Attributes attributes) {
67         recreateTag(buffer, localName, attributes);
68         if (MATH.equals(localName)) {
69             return buffer;
70         }
71
72         return null;
73     }
74
75     /**
76      * {@inheritDoc}
77      */
78     public String endExternalXML(String localName) {
79         if (MATH.equals(localName)) {
80             recreateTag(buffer, localName, null);
81             File f = new File(outputDir, BASENAME + (compt++) + ".png");
82             Map<String, String> attributes = new HashMap();
83             attributes.put("fontsize", "16");
84
85             String ret = ImageConverter.getImageByCode(getConverter().getCurrentFileName(), buffer.toString(), attributes, "image/mathml", f, baseDir + f.getName());
86             buffer.setLength(0);
87
88             return ret;
89         }
90
91         recreateTag(buffer, localName, null);
92
93         return null;
94     }
95 }