Doc Scilab image gen: when localized='false' in locale other than en_US and when...
[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.1-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 import org.xml.sax.Locator;
21
22 import org.scilab.modules.helptools.HTMLDocbookTagConverter;
23
24 /**
25  * Handle the included SVG code
26  * @author Calixte DENIZET
27  */
28 public class HTMLMathMLHandler extends ExternalXMLHandler {
29
30     private static final String MATH = "math";
31     private static final String BASENAME = "_MathML_";
32
33     private StringBuilder buffer = new StringBuilder(8192);
34     private String baseDir;
35     private String outputDir;
36     private Boolean isLocalized;
37     private int line;
38
39     /**
40      * Constructor
41      * @param baseDir the base directory where to put the generated images
42      */
43     public HTMLMathMLHandler(String outputDir, String baseDir) {
44         this.outputDir = outputDir + File.separator + baseDir;
45         this.baseDir = baseDir + "/";
46     }
47
48     /**
49      * {@inheritDoc}
50      */
51     public String getURI() {
52         return "http://www.w3.org/1998/Math/MathML";
53     }
54
55     /**
56      * {@inheritDoc}
57      */
58     public StringBuilder startExternalXML(String localName, Attributes attributes, Locator locator) {
59         if (MATH.equals(localName)) {
60             isLocalized = getLocalized(getScilabURI(), attributes);
61             line = locator.getLineNumber();
62         }
63
64         recreateTag(buffer, localName, attributes);
65         if (MATH.equals(localName)) {
66             return buffer;
67         }
68
69         return null;
70     }
71
72     /**
73      * {@inheritDoc}
74      */
75     public String endExternalXML(String localName) {
76         if (MATH.equals(localName)) {
77             recreateTag(buffer, localName, null);
78             File f;
79             String language = ((HTMLDocbookTagConverter) getConverter()).getLanguage();
80             if (isLocalized != null && isLocalized.booleanValue()) {
81                 f = new File(outputDir, BASENAME + getConverter().getCurrentBaseName() + "_" + language + "_" + (compt++) + ".png");
82             } else {
83                 if ("ru_RU".equals(language) && HTMLDocbookTagConverter.containsCyrillic(buffer)) {
84                     System.err.println("Warning: MathML code in " + getConverter().getCurrentFileName() + " at line " + line + " contains cyrillic character. The tag <math> should contain the attribute scilab:localized=\"true\"");
85                 } else if ("ja_JP".equals(language) && HTMLDocbookTagConverter.containsCJK(buffer)) {
86                     System.err.println("Warning: MathML code in " + getConverter().getCurrentFileName() + " at line " + line + " contains CJK character. The tag <math> should contain the attribute scilab:localized=\"true\"");
87                 }
88                 f = new File(outputDir, BASENAME + getConverter().getCurrentBaseName() + "_" + (compt++) + ".png");
89             }
90
91             Map<String, String> attributes = new HashMap<String, String>();
92             attributes.put("fontsize", "16");
93             String baseImagePath = "";
94             if (getConverter() instanceof HTMLDocbookTagConverter) {
95                 baseImagePath = ((HTMLDocbookTagConverter) getConverter()).getBaseImagePath();
96             }
97
98             String ret = getConverter().getImageConverter().getImageByCode(getConverter().getCurrentFileName(), buffer.toString(), attributes, "image/mathml", f, baseDir + f.getName(), baseImagePath, line, language, isLocalized);
99             buffer.setLength(0);
100
101             return ret;
102         }
103
104         recreateTag(buffer, localName, null);
105
106         return null;
107     }
108 }