Update jflex to 1.8.2
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / SciDocMain.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - 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.File;
19 import org.scilab.modules.commons.ScilabConstants;
20 import org.scilab.modules.helptools.Converter.Backend;
21 import org.scilab.modules.helptools.image.ImageConverter;
22 import org.xml.sax.SAXException;
23
24 /**
25  * Class to convert DocBook
26  * @author Calixte DENIZET
27  */
28 public final class SciDocMain {
29     /**
30      * The output directory
31      */
32     private String outputDirectory;
33     /**
34      * The target language as locale string descriptor (en_US, fr_FR, ...)
35      */
36     private String language;
37     /**
38      * Target format
39      */
40     private Backend format;
41     /**
42      * Image directory relative to the outputDirectory
43      */
44     private String imagedir = ".";
45     /**
46      * The configuration of the current generation
47      */
48     private SciDocConfiguration conf = new SciDocConfiguration();
49     /**
50      * True if the documentation should be generated for a toolbox, false for Scilab
51      */
52     private boolean isToolbox;
53
54     /*
55      * GIWS Exported methods
56      */
57
58     /**
59      * Set the directory where files must be exported
60      * Note that directory is created
61      *
62      * @param outputDirectoryectory The path to the directory
63      * @return If the directory exists
64      */
65     public boolean setOutputDirectory(String outputDirectory) {
66         File directory = new File(outputDirectory);
67         if (!directory.isDirectory()) {
68             if (!directory.mkdirs()) {
69                 return false;
70             }
71         }
72         this.outputDirectory = new File(outputDirectory).getAbsolutePath();
73         return true;
74     }
75
76     /**
77      * Defines the language
78      *
79      * @param language the language (xx_XX ex: en_US, fr_FR)
80      */
81     public void setWorkingLanguage(String language) {
82         this.language = language;
83     }
84
85     /**
86      * @param isToolbox must be true if we compile a toolbox doc
87      */
88     public void setIsToolbox(boolean isToolbox) {
89         this.isToolbox = isToolbox;
90     }
91
92     /**
93      * Defines the export format
94      * @param format the format (among the list CHM, HTML, PDF, JH, PS)
95      */
96     public void setExportFormat(String format) {
97         final String f = format.toUpperCase().replace('-', '_');
98         try {
99             this.format = Enum.valueOf(Backend.class, f);
100             return;
101         } catch (IllegalArgumentException e) {
102         }
103
104         Backend[] values = Backend.values();
105         final StringBuilder str = new StringBuilder();
106         str.append('[');
107         str.append(values[0]);
108         for (int i = 1; i < values.length; i++) {
109             str.append(',').append(' ');
110             str.append(values[i].toString().toLowerCase());
111         }
112         str.append(']');
113         System.err.printf("%s is not a supported format : one of %s expected.%n", format.toString(), str);
114
115     }
116
117     /* Stylesheet is useless and just kept to keep the consistency with
118      * builddoc V1 */
119     public String process(String sourceDoc, String styleSheet) throws Throwable  {
120         String fileToExec = null;
121
122         if (!new File(sourceDoc).isFile()) {
123             System.err.println("Could not find master document: " + sourceDoc);
124             return null;
125         }
126
127         try {
128             Converter converter = null;
129             ImageConverter imgConvert = new ImageConverter();
130
131             switch (format) {
132                 case JAVAHELP:
133                     if (!isToolbox) {
134                         imgConvert.loadMD5s(ScilabConstants.SCI.getPath() + "/modules/helptools/etc");
135                     }
136                     converter = new JavaHelpDocbookTagConverter(sourceDoc, this, imgConvert);
137                     break;
138                 case HTML:
139                     converter = new HTMLDocbookTagConverter(sourceDoc, this, imgConvert);
140                     break;
141                 case WEB:
142                     if (!isToolbox) {
143                         imgConvert.loadMD5s(ScilabConstants.SCI.getPath() + "/modules/helptools/etc");
144                     }
145                     converter = new HTMLDocbookTagConverter(sourceDoc, this, imgConvert);
146                     break;
147                 case CHM:
148                     if (!isToolbox) {
149                         imgConvert.loadMD5s(ScilabConstants.SCI.getPath() + "/modules/helptools/etc");
150                     }
151                     converter = new CHMDocbookTagConverter(sourceDoc, this, imgConvert);
152                     break;
153                 case FO:
154                     converter = new FODocbookTagConverter(sourceDoc, this, imgConvert);
155                     break;
156                 case JAR_ONLY:
157                     converter = new JarOnlyConverter(this);
158                     break;
159                 case PDF:
160                 case PS:
161                     converter = new FopConverter(this);
162                     break;
163                 default:
164                     System.err.printf("%s is not a supported format.%n", format);
165                     return null;
166             }
167
168             converter.registerAllExternalXMLHandlers();
169
170             converter.convert();
171
172             converter.install();
173
174             if (imgConvert.getScilabImageConverter() != null) {
175                 fileToExec = imgConvert.getScilabImageConverter().getFileWithScilabCode();
176             }
177
178         } catch (SAXException e) {
179             System.err.println("XML parsing error while generating documentation for file " + sourceDoc + ":");
180             System.err.println(e.toString());
181         } catch (Throwable e) {
182             System.err.println("Unhandled error while generating documentation for file " + sourceDoc + ":");
183             e.printStackTrace();
184             throw e;
185         }
186
187         return fileToExec;
188     }
189
190     /*
191      * Getters
192      */
193
194     public String getOutputDirectory() {
195         return outputDirectory;
196     }
197
198     public String getLanguage() {
199         return language;
200     }
201
202     public Backend getFormat() {
203         return format;
204     }
205
206     public String getImagedir() {
207         return imagedir;
208     }
209
210     public SciDocConfiguration getConf() {
211         return conf;
212     }
213
214     public boolean isToolbox() {
215         return isToolbox;
216     }
217 }