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 / HTMLScilabHandler.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 SCILAB code
25  * @author Calixte DENIZET
26  */
27 public class HTMLScilabHandler extends ExternalXMLHandler {
28
29     private static final String SCILAB = "image";
30     private static final String BASENAME = "_";
31
32     private static HTMLScilabHandler instance;
33
34     private int compt = 1;
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 HTMLScilabHandler(String outputDir, String baseDir) {
44         this.outputDir = outputDir + File.separator + baseDir;
45         this.baseDir = baseDir + "/";
46     }
47
48     public static HTMLScilabHandler getInstance(String outputDir, String baseDir) {
49         if (instance == null) {
50             instance = new HTMLScilabHandler(outputDir, baseDir);
51         }
52
53         return instance;
54     }
55
56     public static HTMLScilabHandler getInstance() {
57         return instance;
58     }
59
60     public void resetCompt() {
61         compt = 1;
62     }
63
64     /**
65      * {@inheritDoc}
66      */
67     public String getURI() {
68         return "http://www.scilab.org";
69     }
70
71     /**
72      * {@inheritDoc}
73      */
74     public StringBuilder startExternalXML(String localName, Attributes attributes) {
75         recreateTag(buffer, localName, attributes);
76         if (SCILAB.equals(localName)) {
77             return buffer;
78         }
79
80         return null;
81     }
82
83     /**
84      * {@inheritDoc}
85      */
86     public String endExternalXML(String localName) {
87         if (SCILAB.equals(localName)) {
88             recreateTag(buffer, localName, null);
89             String currentFileName = getConverter().getCurrentFileName();
90             String baseName = new File(currentFileName).getName();
91             int dotpos = baseName.lastIndexOf('.');
92             if (dotpos != -1) {
93                 baseName = baseName.substring(0, dotpos);
94             }
95             File f = new File(outputDir, baseName + BASENAME + (compt++) + ".png");
96             Map<String, String> attributes = new HashMap<String, String>();
97
98             String ret = ImageConverter.getImageByCode(currentFileName, buffer.toString(), attributes, "image/scilab", f, baseDir + f.getName());
99             buffer.setLength(0);
100
101             return ret;
102         }
103
104         recreateTag(buffer, localName, null);
105
106         return null;
107     }
108 }