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 / HTMLSVGHandler.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 HTMLSVGHandler extends ExternalXMLHandler {
28
29     private static final String SVG = "svg";
30     private static final String BASENAME = "Equation_SVG_";
31
32     private static HTMLSVGHandler 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 HTMLSVGHandler(String outputDir, String baseDir) {
44         this.outputDir = outputDir + File.separator + baseDir;
45         this.baseDir = baseDir + "/";
46     }
47
48     public static HTMLSVGHandler getInstance(String outputDir, String baseDir) {
49         if (instance == null) {
50             instance = new HTMLSVGHandler(outputDir, baseDir);
51         }
52
53         return instance;
54     }
55
56     /**
57      * {@inheritDoc}
58      */
59     public String getURI() {
60         return "http://www.w3.org/2000/svg";
61     }
62
63     /**
64      * {@inheritDoc}
65      */
66     public StringBuilder startExternalXML(String localName, Attributes attributes) {
67         recreateTag(buffer, localName, attributes);
68         if (SVG.equals(localName)) {
69             return buffer;
70         }
71
72         return null;
73     }
74
75     /**
76      * {@inheritDoc}
77      */
78     public String endExternalXML(String localName) {
79         if (SVG.equals(localName)) {
80             recreateTag(buffer, localName, null);
81             File f = new File(outputDir, BASENAME + (compt++) + ".png");
82             Map<String, String> attributes = new HashMap();
83
84             String ret = ImageConverter.getImageByCode(getConverter().getCurrentFileName(), buffer.toString(), attributes, "image/svg", f, baseDir + f.getName());
85             buffer.setLength(0);
86
87             return ret;
88         }
89
90         recreateTag(buffer, localName, null);
91
92         return null;
93     }
94 }