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