Update jflex to 1.8.2
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / SciDocConfiguration.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 package org.scilab.modules.helptools;
17
18 import java.io.BufferedReader;
19 import java.io.File;
20 import java.io.IOException;
21 import java.io.InputStreamReader;
22 import java.io.FileInputStream;
23 import java.util.regex.Matcher;
24
25 import javax.xml.parsers.DocumentBuilderFactory;
26 import javax.xml.parsers.ParserConfigurationException;
27
28 import org.w3c.dom.Document;
29 import org.w3c.dom.Element;
30 import org.w3c.dom.NodeList;
31 import org.xml.sax.SAXException;
32
33 import org.scilab.modules.commons.ScilabConstants;
34 import org.scilab.modules.commons.xml.ScilabDocumentBuilderFactory;
35
36 /**
37  * @author Calixte Denizet
38  */
39 public class SciDocConfiguration {
40
41     private static final String SCIVAR = "\\$\\{SCI\\}";
42     private static final String SCI = ScilabConstants.SCI.getPath();
43     private static final String CONF = SCI + "/modules/helptools/etc/SciDocConf.xml";
44     private static final String VERSION = SCI + "/Version.incl";
45     private static final String ERROR_READ = "Problem to read the file ";
46
47     private Document doc;
48
49     /**
50      * Default constructor
51      * @param filename the configuration file
52      */
53     public SciDocConfiguration() {
54         readDocument(CONF);
55     }
56
57     /**
58      * Read the document
59      * @param filename the configuration file
60      */
61     public void readDocument(String filename) {
62         try {
63             DocumentBuilderFactory factory = ScilabDocumentBuilderFactory.newInstance();
64             doc = factory.newDocumentBuilder().parse(new File(filename));
65         } catch (ParserConfigurationException e) {
66             System.err.println(ERROR_READ + filename);
67         } catch (SAXException e) {
68             System.err.println(ERROR_READ + filename);
69         } catch (IOException e) {
70             System.err.println(ERROR_READ + filename);
71         }
72     }
73
74     /**
75      * @return the file path
76      */
77     public String getCSS() {
78         String str = ((Element) doc.getDocumentElement().getElementsByTagName("css").item(0)).getAttribute("doc");
79         return str.replaceAll(SCIVAR, Matcher.quoteReplacement(SCI));
80     }
81
82     /**
83      * @param kind should be javahelp, chm, html or web
84      * @return the template file path
85      */
86     public String getTemplate(String kind) {
87         String str = ((Element) doc.getDocumentElement().getElementsByTagName("templates").item(0)).getAttribute(kind);
88         return str.replaceAll(SCIVAR, Matcher.quoteReplacement(SCI));
89     }
90
91     /**
92      * @return the Scilab's doc web url
93      */
94     public String getWebSiteURL() {
95         return ((Element) doc.getDocumentElement().getElementsByTagName("website").item(0)).getAttribute("url");
96     }
97
98     /**
99      * @return the path of the file containing Scilab macros
100      */
101     public String[] getMacros() {
102         return getPathList("macros");
103     }
104
105     /**
106      * @return the path of the file containing Scilab primitives
107      */
108     public String[] getBuiltins() {
109         return getPathList("builtins");
110     }
111
112     /**
113      * @param kind should be "macros" or "builtins"
114      * @return the path of the file containing Scilab macros or built-in function.
115      */
116     private String[] getPathList(String kind) {
117         Element macros = (Element) doc.getDocumentElement().getElementsByTagName(kind).item(0);
118         NodeList pathList = macros.getElementsByTagName("file");
119         String[] paths = new String[pathList.getLength()];
120         for (int i = 0; i < paths.length; i++) {
121             paths[i] = ((Element) pathList.item(i)).getAttribute("path").replaceAll(SCIVAR, Matcher.quoteReplacement(SCI));
122         }
123
124         return paths;
125     }
126
127     /**
128      * @return the version string
129      */
130     public String getVersion() {
131         String str = null;
132         NodeList list = doc.getDocumentElement().getElementsByTagName("version");
133         if (list != null && list.getLength() > 0) {
134             Element el = (Element) list.item(0);
135             if (el != null) {
136                 str = el.getAttribute("id");
137             }
138         }
139
140         return getVersion(str);
141     }
142
143     /**
144      * Get the version in Version.incl if ver==null or ver=="".
145      * @param ver the actual version
146      * @return the version in Version.incl
147      */
148     private static String getVersion(String ver) {
149         String ret = "";
150         if (ver == null || ver.isEmpty()) {
151           try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(VERSION), "UTF-8"))) {
152                ret = reader.readLine().split("=")[1];
153             } catch (IOException e) {
154                 System.err.println(e);
155             }
156         } else {
157             ret = ver;
158         }
159
160         return ret;
161     }
162 }