Help generation: add the ability to generate an image from inlined Scilab code 04/7704/10
Calixte DENIZET [Sat, 23 Jun 2012 17:36:59 +0000 (19:36 +0200)]
                 in refentry add: xmlns:scilab="http://www.scilab.org"
                 and in xml, add: <scilab:image>plot3d();</scilab:image>

Change-Id: I96dccb70716a69da03ec2b76ee5874fdf6618bf2

20 files changed:
scilab/modules/helptools/macros/xmltoformat.sci
scilab/modules/helptools/sci_gateway/cpp/sci_buildDocv2.cpp
scilab/modules/helptools/src/java/org/scilab/modules/helptools/DocbookElement.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/DocbookTagConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/HTMLDocbookTagConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/JavaHelpDocbookElement.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/SciDocMain.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/ExternalXMLHandler.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLMathMLHandler.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLSVGHandler.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLScilabHandler.java [new file with mode: 0644]
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ExternalImageConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ImageConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/LaTeXImageConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/MathMLImageConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/SVGImageConverter.java
scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ScilabImageConverter.java [new file with mode: 0644]
scilab/modules/helptools/src/jni/BuildDocObjectv2.giws.xml
scilab/modules/helptools/src/jni/SciDocMain.cpp
scilab/modules/helptools/src/jni/SciDocMain.hxx

index a7c7976..b261ef1 100644 (file)
@@ -508,7 +508,11 @@ function generated_files = xmltoformat(output_format,dirs,titles,directory_langu
         end
 
         // process the build
-        buildDocv2(output_format,modules_tree("master_document"), my_wanted_language);
+        fileToExec = buildDocv2(output_format,modules_tree("master_document"), my_wanted_language);
+        if fileToExec ~= [] then
+            exec(fileToExec, -1);
+           buildDocv2("jar-only",modules_tree("master_document"), my_wanted_language);
+        end
 
         // Check if the help file has been generated
         if fileinfo(buildDoc_file)==[] then
@@ -605,7 +609,11 @@ function generated_files = xmltoformat(output_format,dirs,titles,directory_langu
             end
 
             // process the build
-            buildDocv2(output_format,this_tree("master_document"),directory_language_c(k),dirs_c(k));
+            fileToExec = buildDocv2(output_format,this_tree("master_document"),directory_language_c(k),dirs_c(k));
+            if fileToExec ~= [] then
+                exec(fileToExec, -1);
+               buildDocv2("jar-only",this_tree("master_document"),directory_language_c(k),dirs_c(k));
+            end
 
             // Check if the help file has been generated
             if fileinfo(buildDoc_file)==[] then
@@ -726,7 +734,11 @@ function generated_files = xmltoformat(output_format,dirs,titles,directory_langu
             end
 
             // process the build
-            buildDocv2(output_format,this_tree("master_document"),directory_language(k),dirs(k));
+            fileToExec = buildDocv2(output_format,this_tree("master_document"),directory_language(k),dirs(k));
+            if fileToExec ~= [] then
+                exec(fileToExec, -1);
+               buildDocv2("jar-only",this_tree("master_document"),directory_language(k),dirs(k));
+            end
 
              // Check if the help file has been generated
             if fileinfo(buildDoc_file)==[] then
index f884133..cb84f37 100644 (file)
@@ -58,6 +58,7 @@ extern "C"
         std::string outputDirectoryTMP;
         std::string language;
         std::string styleSheet; /* the CSS */
+        char * fileToExec = NULL;
         SciErr sciErr;
         int *piAddr = NULL;
         int iRet = 0;
@@ -207,8 +208,16 @@ extern "C"
         else                    /* Scilab help */
         {
             /* Update the path with the localization */
-            outputDirectoryTMP =
-                std::string("/modules/helptools/") + std::string(exportFormat) + std::string("/scilab_") + language + std::string("_help/");
+            if (exportFormat != "jar-only")
+            {
+                outputDirectoryTMP =
+                    std::string("/modules/helptools/") + std::string(exportFormat) + std::string("/scilab_") + language + std::string("_help/");
+            }
+            else
+            {
+                outputDirectoryTMP =
+                    std::string("/modules/helptools/") + std::string("javaHelp") + std::string("/scilab_") + language + std::string("_help/");
+            }
 
             outputDirectory = SciPath + outputDirectoryTMP;
         }
@@ -230,7 +239,7 @@ extern "C"
                     doc->setWorkingLanguage((char *)language.c_str());
                     doc->setExportFormat((char *)exportFormat.c_str());
                     doc->setIsToolbox(Rhs == 4);
-                    doc->process((char *)masterXML.c_str(), (char *)styleSheet.c_str());
+                    fileToExec = doc->process((char *)masterXML.c_str(), (char *)styleSheet.c_str());
                 }
                 else
                 {
@@ -243,6 +252,10 @@ extern "C"
                 }
 
             }
+            else if (exportFormat == "jar-only")
+            {
+                org_scilab_modules_helptools::SciDocMain::generateJavahelp(getScilabJavaVM(), (char *)outputDirectory.c_str(), (char *)language.c_str());
+            }
             else
             {
                 org_scilab_modules_helptools::BuildDocObject * doc = new org_scilab_modules_helptools::BuildDocObject(getScilabJavaVM());
@@ -265,7 +278,7 @@ extern "C"
 
             }
         }
-        catch(GiwsException::JniException ex)
+        catch (GiwsException::JniException ex)
         {
             Scierror(999, _("%s: Error while building documentation: %s.\n"), fname, ex.getJavaDescription().c_str());
             Scierror(999, _("%s: Execution Java stack: %s.\n"), fname, ex.getJavaStackTrace().c_str());
@@ -275,8 +288,19 @@ extern "C"
             return FALSE;
         }
 
-        LhsVar(1) = 0;
+        if (fileToExec)
+        {
+            createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, &fileToExec);
+            delete [] fileToExec;
+        }
+        else
+        {
+            createEmptyMatrix(pvApiCtx, Rhs + 1);
+        }
+
+        LhsVar(1) = Rhs + 1;
         PutLhsVar();
+
         return 0;
     }
     /*--------------------------------------------------------------------------*/
index 52a5554..b60006c 100644 (file)
@@ -15,55 +15,64 @@ package org.scilab.modules.helptools;
 import java.util.Map;
 
 public class DocbookElement {
-       
+
     private Map<String, String> attributes;
     private String name;
     private StringBuilder contents;
-       
+    private String uri;
+
     /**
      * Default constructor
      * @param name the tag name
      * @param attributes the attributes and its values
      */
-    protected DocbookElement(String name, Map attributes) {
-       this.name = name;
-       this.attributes = attributes;
-       contents = new StringBuilder();
+    protected DocbookElement(String name, String uri, Map attributes) {
+        this.name = name;
+        this.attributes = attributes;
+        this.uri = uri;
+        contents = new StringBuilder();
     }
 
     /**
      * @return a new DocbookElement
      */
-    public DocbookElement getNewInstance(String name, Map attributes) {
-       return new DocbookElement(name, attributes);
+    public DocbookElement getNewInstance(String name, String uri, Map attributes) {
+        return new DocbookElement(name, uri, attributes);
     }
 
     /**
      * @return the tag name
      */
     public String getName() {
-       return name;
+        return name;
+    }
+
+    /**
+     * @return the tag uri
+     */
+    public String getURI() {
+        return uri;
     }
 
     /**
      * @return the attributes
      */
     public Map<String, String> getAttributes() {
-       return attributes;
+        return attributes;
     }
-    
+
     /**
      * @return the buffer used to add contents of the tag
      */
     public StringBuilder getStringBuilder() {
-       return contents;
+        return contents;
     }
 
     /**
      * @param the buffer to use
      */
     public void setStringBuilder(StringBuilder buf) {
-       contents = buf;
+        contents = buf;
     }
 
     /**
@@ -80,7 +89,7 @@ public class DocbookElement {
      * @return an object
      */
     public Object get() {
-       return null;
+        return null;
     }
 
     /**
@@ -93,6 +102,6 @@ public class DocbookElement {
      * @return the parent element
      */
     public DocbookElement getParent() {
-       return null;
+        return null;
     }
 }
index 36ded42..97b2347 100644 (file)
@@ -33,6 +33,7 @@ import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
 import org.scilab.modules.helptools.external.ExternalXMLHandler;
+import org.scilab.modules.helptools.external.HTMLScilabHandler;
 
 /**
  * Class the convert a DocBook xml file
@@ -41,13 +42,13 @@ import org.scilab.modules.helptools.external.ExternalXMLHandler;
 public class DocbookTagConverter extends DefaultHandler {
 
     private static final String DOCBOOKURI = "http://docbook.org/ns/docbook";
-    private static final Class[] argsType = new Class[]{Map.class, String.class};
+    private static final Class[] argsType = new Class[] {Map.class, String.class};
 
     private Map<String, Method> mapMeth = new HashMap();
     private Map<String, ExternalXMLHandler> externalHandlers = new HashMap();
     private List<DocbookTagConverter> converters;
     private final File in;
-    private DocbookElement baseElement = new DocbookElement(null, null);
+    private DocbookElement baseElement = new DocbookElement(null, null, null);
     private Stack<DocbookElement> stack = new Stack();
     private String errors = "";
 
@@ -109,7 +110,7 @@ public class DocbookTagConverter extends DefaultHandler {
                 }
             }
             try {
-                return (String) method.invoke(this, new Object[]{attributes, contents});
+                return (String) method.invoke(this, new Object[] {attributes, contents});
             } catch (IllegalAccessException e) {
                 throw new UnhandledDocbookTagException(tag);
             } catch (InvocationTargetException e) {
@@ -120,6 +121,10 @@ public class DocbookTagConverter extends DefaultHandler {
         }
     }
 
+    public String getCurrentFileName() {
+        return currentFileName;
+    }
+
     /**
      * Register an Docbook tag converter. The aim is to parse the xml one time.
      * @param c the converter to register
@@ -160,6 +165,7 @@ public class DocbookTagConverter extends DefaultHandler {
     public void registerExternalXMLHandler(ExternalXMLHandler h) {
         if (externalHandlers.get(h.getURI()) == null) {
             externalHandlers.put(h.getURI(), h);
+            h.setConverter(this);
         }
     }
 
@@ -167,7 +173,7 @@ public class DocbookTagConverter extends DefaultHandler {
      * @param tagName the tag name
      * @return true if the contents of the tag must be escaped
      */
-    public boolean isEscapable(String tagName) {
+    public boolean isEscapable(String tagName, String uri) {
         return true;
     }
 
@@ -225,6 +231,7 @@ public class DocbookTagConverter extends DefaultHandler {
      */
     public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
         currentFileName = systemId;
+        HTMLScilabHandler.getInstance().resetCompt();
         if (converters != null) {
             for (DocbookTagConverter conv : converters) {
                 conv.resolveEntity(publicId, systemId);
@@ -238,7 +245,7 @@ public class DocbookTagConverter extends DefaultHandler {
      * {@inheritDoc}
      */
     public void startDocument() throws SAXException {
-        stack.push(baseElement.getNewInstance(null, null));
+        stack.push(baseElement.getNewInstance(null, null, null));
         if (converters != null) {
             for (DocbookTagConverter conv : converters) {
                 conv.startDocument();
@@ -269,7 +276,7 @@ public class DocbookTagConverter extends DefaultHandler {
             for (int i = 0; i < len; i++) {
                 map.put(attributes.getLocalName(i), attributes.getValue(i));
             }
-            stack.push(baseElement.getNewInstance(localName, map));
+            stack.push(baseElement.getNewInstance(localName, uri, map));
         } else {
             ExternalXMLHandler h = externalHandlers.get(uri);
             if (h == null) {
@@ -278,7 +285,7 @@ public class DocbookTagConverter extends DefaultHandler {
             }
             StringBuilder buf = h.startExternalXML(localName, attributes);
             if (buf != null) {
-                DocbookElement elem = baseElement.getNewInstance(localName, null);
+                DocbookElement elem = baseElement.getNewInstance(localName, uri, null);
                 elem.setStringBuilder(buf);
                 stack.push(elem);
             }
@@ -342,38 +349,38 @@ public class DocbookTagConverter extends DefaultHandler {
     public void characters(char[] ch, int start, int length) throws SAXException {
         int end = start + length;
 
-        if (isEscapable(stack.peek().getName())) {
+        if (isEscapable(stack.peek().getName(), stack.peek().getURI())) {
             StringBuilder buf = stack.peek().getStringBuilder();
             int save = start;
             for (int i = start; i < end; i++) {
                 switch (ch[i]) {
-                case '\'' :
-                    buf.append(ch, save, i - save);
-                    buf.append("&#0039;");
-                    save = i + 1;
-                    break;
-                case '\"' :
-                    buf.append(ch, save, i - save);
-                    buf.append("&#0034;");
-                    save = i + 1;
-                    break;
-                case '<' :
-                    buf.append(ch, save, i - save);
-                    buf.append("&lt;");
-                    save = i + 1;
-                    break;
-                case '>' :
-                    buf.append(ch, save, i - save);
-                    buf.append("&gt;");
-                    save = i + 1;
-                    break;
-                case '&' :
-                    buf.append(ch, save, i - save);
-                    buf.append("&amp;");
-                    save = i + 1;
-                    break;
-                default :
-                    break;
+                    case '\'' :
+                        buf.append(ch, save, i - save);
+                        buf.append("&#0039;");
+                        save = i + 1;
+                        break;
+                    case '\"' :
+                        buf.append(ch, save, i - save);
+                        buf.append("&#0034;");
+                        save = i + 1;
+                        break;
+                    case '<' :
+                        buf.append(ch, save, i - save);
+                        buf.append("&lt;");
+                        save = i + 1;
+                        break;
+                    case '>' :
+                        buf.append(ch, save, i - save);
+                        buf.append("&gt;");
+                        save = i + 1;
+                        break;
+                    case '&' :
+                        buf.append(ch, save, i - save);
+                        buf.append("&amp;");
+                        save = i + 1;
+                        break;
+                    default :
+                        break;
                 }
             }
 
@@ -399,6 +406,13 @@ public class DocbookTagConverter extends DefaultHandler {
     }
 
     /**
+     * @return the document locator
+     */
+    public Locator getDocumentLocator() {
+        return locator;
+    }
+
+    /**
      * @return the used stack
      */
     protected Stack<DocbookElement> getStack() {
@@ -419,7 +433,7 @@ public class DocbookTagConverter extends DefaultHandler {
      * @param e the exception to handle
      * @throws SAXException if problem
      */
-    protected void exceptionOccured(Exception e){
+    protected void exceptionOccured(Exception e) {
         if (!hasError) {
             hasError = true;
         }
index d025b53..fbc4aec 100644 (file)
@@ -26,6 +26,7 @@ import org.xml.sax.SAXException;
 import org.scilab.modules.helptools.image.ImageConverter;
 import org.scilab.modules.helptools.image.LaTeXImageConverter;
 import org.scilab.modules.helptools.image.MathMLImageConverter;
+import org.scilab.modules.helptools.image.ScilabImageConverter;
 import org.scilab.modules.helptools.image.SVGImageConverter;
 import org.scilab.modules.helptools.scilab.ScilabLexer;
 import org.scilab.modules.helptools.scilab.HTMLScilabCodeHandler;
@@ -43,6 +44,7 @@ import org.scilab.modules.localization.Messages;
  */
 public class HTMLDocbookTagConverter extends DocbookTagConverter implements TemplateFiller {
 
+    private static final String SCILAB_URI = "http://www.scilab.org";
     private static final String LATEXBASENAME = "Equation_LaTeX_";
     private static final String VERSION = Messages.gettext("Version");
     private static final String DESCRIPTION = Messages.gettext("Description");
@@ -117,27 +119,27 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         this.isToolbox = isToolbox;
         if (isToolbox) {// we generate a toolbox's help
             HTMLScilabCodeHandler.setLinkWriter(new AbstractScilabCodeHandler.LinkWriter() {
-                    public String getLink(String id) {
-                        if (id.length() > 0 && id.charAt(0) == '%') {
-                            id = id.replace("%", "percent");
-                        }
-                        String link = mapId.get(id);
-                        if (link == null) {
-                            return HTMLDocbookTagConverter.this.urlBase + id;
-                        } else {
-                            return link;
-                        }
+                public String getLink(String id) {
+                    if (id.length() > 0 && id.charAt(0) == '%') {
+                        id = id.replace("%", "percent");
                     }
-                });
+                    String link = mapId.get(id);
+                    if (link == null) {
+                        return HTMLDocbookTagConverter.this.urlBase + id;
+                    } else {
+                        return link;
+                    }
+                }
+            });
         } else {// we generate Scilab's help
             HTMLScilabCodeHandler.setLinkWriter(new AbstractScilabCodeHandler.LinkWriter() {
-                    public String getLink(String id) {
-                        if (id.length() > 0 && id.charAt(0) == '%') {
-                            id = id.replace("%", "percent");
-                        }
-                        return mapId.get(id);
+                public String getLink(String id) {
+                    if (id.length() > 0 && id.charAt(0) == '%') {
+                        id = id.replace("%", "percent");
                     }
-                });
+                    return mapId.get(id);
+                }
+            });
         }
 
         xmlLexer = new XMLLexer();
@@ -148,6 +150,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         ImageConverter.registerExternalImageConverter(LaTeXImageConverter.getInstance());
         ImageConverter.registerExternalImageConverter(MathMLImageConverter.getInstance());
         ImageConverter.registerExternalImageConverter(SVGImageConverter.getInstance());
+        ImageConverter.registerExternalImageConverter(ScilabImageConverter.getInstance());
     }
 
     /**
@@ -231,8 +234,8 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
     /**
      * {@inheritDoc}
      */
-    public boolean isEscapable(final String tagName) {
-        return !"latex".equals(tagName) && !"screen".equals(tagName) && !"programlisting".equals(tagName) && !"synopsis".equals(tagName);
+    public boolean isEscapable(final String tagName, final String uri) {
+        return !"latex".equals(tagName) && !"screen".equals(tagName) && !"programlisting".equals(tagName) && !"synopsis".equals(tagName) && !(uri.equals(SCILAB_URI) && tagName.equals("image"));
     }
 
     /**
@@ -493,7 +496,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
             hasExamples = false;
         }
         String rp = encloseContents("span", "refentry-description", refpurpose);
-        String str = encloseContents("li", encloseContents("a", new String[]{"href", fileName, "class", "refentry"}, currentId) + " &#8212; " + rp);
+        String str = encloseContents("li", encloseContents("a", new String[] {"href", fileName, "class", "refentry"}, currentId) + " &#8212; " + rp);
         refpurpose = "";
         refname = "";
         currentId = null;
@@ -514,7 +517,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         String title = encloseContents("h3", "title-section", sectionTitle);
         createHTMLFile(attributes.get("id"), fileName, sectionTitle, title + "\n" + str);
 
-        str = encloseContents("li", encloseContents("a", new String[]{"href", fileName, "class", "section"}, sectionTitle) + "\n" + str);
+        str = encloseContents("li", encloseContents("a", new String[] {"href", fileName, "class", "section"}, sectionTitle) + "\n" + str);
         sectionTitle = "";
 
         return str;
@@ -543,7 +546,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
             System.err.println("Total generated html files: " + nbFiles);
         }
 
-        return encloseContents("li", encloseContents("a", new String[]{"href", indexFilename, "class", "part"}, bookTitle) + "\n" + str);
+        return encloseContents("li", encloseContents("a", new String[] {"href", indexFilename, "class", "part"}, bookTitle) + "\n" + str);
     }
 
     /**
@@ -559,7 +562,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         String title = encloseContents("h3", "title-part", partTitle);
         createHTMLFile(attributes.get("id"), fileName, partTitle, title + "\n" + str);
 
-        str = encloseContents("li", encloseContents("a", new String[]{"href", fileName, "class", "part"}, partTitle) + "\n" + str);
+        str = encloseContents("li", encloseContents("a", new String[] {"href", fileName, "class", "part"}, partTitle) + "\n" + str);
         partTitle = "";
 
         return str;
@@ -578,7 +581,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         String title = encloseContents("h3", "title-chapter", chapterTitle);
         createHTMLFile(attributes.get("id"), fileName, chapterTitle, title + "\n" + str);
 
-        str = encloseContents("li", encloseContents("a", new String[]{"href", fileName, "class", "chapter"}, chapterTitle) + "\n" + str);
+        str = encloseContents("li", encloseContents("a", new String[] {"href", fileName, "class", "chapter"}, chapterTitle) + "\n" + str);
         chapterTitle = "";
 
         return str;
@@ -887,15 +890,15 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
                 if (role != null && role.equals("see also")) {
                     String purpose = mapIdPurpose.get(link);
                     if (purpose != null) {
-                        return encloseContents("a", new String[]{"href", id, "class", "link"}, contents) + " &#8212; " + purpose;
+                        return encloseContents("a", new String[] {"href", id, "class", "link"}, contents) + " &#8212; " + purpose;
                     } else {
-                        return encloseContents("a", new String[]{"href", id, "class", "link"}, contents);
+                        return encloseContents("a", new String[] {"href", id, "class", "link"}, contents);
                     }
                 }
             }
         }
 
-        return encloseContents("a", new String[]{"href", id, "class", "link"}, contents);
+        return encloseContents("a", new String[] {"href", id, "class", "link"}, contents);
     }
 
     /**
@@ -948,7 +951,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
             throw new SAXException("No url attribute in tag ulink");
         }
 
-        return encloseContents("a", new String[]{"href", link, "class", "ulink"}, contents);
+        return encloseContents("a", new String[] {"href", link, "class", "ulink"}, contents);
     }
 
     /**
@@ -971,7 +974,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
             return null;
         }
 
-        return encloseContents("a", new String[]{"href", id, "class", "xref"}, contents);
+        return encloseContents("a", new String[] {"href", id, "class", "xref"}, contents);
     }
 
     /**
@@ -991,7 +994,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
         if (fs == null) {
             attributes.put("fontsize", "16");
         }
-        return ImageConverter.getImageByCode(contents, attributes, "image/latex", f, imageDir + "/" + f.getName());
+        return ImageConverter.getImageByCode(currentFileName, contents, attributes, "image/latex", f, imageDir + "/" + f.getName());
     }
 
     /**
@@ -1105,7 +1108,7 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
     public String handleTd(final Map<String, String> attributes, final String contents) throws SAXException {
         String align = attributes.get("align");
         if (align == null) {
-            return encloseContents("td", new String[]{"align", align}, contents);
+            return encloseContents("td", new String[] {"align", align}, contents);
         }
         return encloseContents("td", contents);
     }
@@ -1132,9 +1135,9 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
             width = "";
         }
         if (id != null) {
-            return "<a name=\"" + id + "\"></a>" + encloseContents("table", new String[]{"class", "informaltable", "border", border, "cellpadding", cellpadding, "width", width}, contents);
+            return "<a name=\"" + id + "\"></a>" + encloseContents("table", new String[] {"class", "informaltable", "border", border, "cellpadding", cellpadding, "width", width}, contents);
         } else {
-            return encloseContents("table", new String[]{"class", "informaltable", "border", border, "cellpadding", cellpadding, "width", width}, contents);
+            return encloseContents("table", new String[] {"class", "informaltable", "border", border, "cellpadding", cellpadding, "width", width}, contents);
         }
     }
 
@@ -1264,9 +1267,9 @@ public class HTMLDocbookTagConverter extends DocbookTagConverter implements Temp
 
         String id = attributes.get("id");
         if (id != null) {
-            return "<a name=\"" + id + "\"></a>" + encloseContents("ol", new String[]{"type", numeration}, contents);
+            return "<a name=\"" + id + "\"></a>" + encloseContents("ol", new String[] {"type", numeration}, contents);
         } else {
-            return encloseContents("ol", new String[]{"type", numeration}, contents);
+            return encloseContents("ol", new String[] {"type", numeration}, contents);
         }
     }
 
index 4dbf2ee..e8a1436 100644 (file)
@@ -15,54 +15,54 @@ package org.scilab.modules.helptools;
 import java.util.Map;
 
 public class JavaHelpDocbookElement extends DocbookElement {
-       
+
     private StringBuilder mapIdContents;
     private DocbookElement parent;
-       
+
     /**
      * {@inheritDoc}
      */
-    protected JavaHelpDocbookElement(String name, Map attributes) {
-       super(name, attributes);
-       mapIdContents = new StringBuilder();
+    protected JavaHelpDocbookElement(String name, String uri, Map attributes) {
+        super(name, uri, attributes);
+        mapIdContents = new StringBuilder();
     }
 
     /**
      * {@inheritDoc}
      */
-    public DocbookElement getNewInstance(String name, Map attributes) {
-       return new JavaHelpDocbookElement(name, attributes);
+    public DocbookElement getNewInstance(String name, String uri, Map attributes) {
+        return new JavaHelpDocbookElement(name, uri, attributes);
     }
 
     /**
      * {@inheritDoc}
      */
     public void append(Object obj) {
-       if (obj instanceof String) {
-           mapIdContents.append((String) obj);
-       } else if (obj instanceof StringBuilder) {
-           mapIdContents.append((StringBuilder) obj);
-       }
+        if (obj instanceof String) {
+            mapIdContents.append((String) obj);
+        } else if (obj instanceof StringBuilder) {
+            mapIdContents.append((StringBuilder) obj);
+        }
     }
-    
+
     /**
      * {@inheritDoc}
      */
     public Object get() {
-       return mapIdContents;
+        return mapIdContents;
     }
 
     /**
      * {@inheritDoc}
      */
     public void setParent(DocbookElement elem) {
-       parent = elem;
+        parent = elem;
     }
 
     /**
      * {@inheritDoc}
      */
     public DocbookElement getParent() {
-       return parent;
+        return parent;
     }
 }
index 4062599..bdd5a2d 100644 (file)
@@ -18,7 +18,9 @@ import org.scilab.modules.commons.ScilabCommonsUtils;
 import org.scilab.modules.commons.ScilabConstants;
 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
 import org.scilab.modules.helptools.external.HTMLMathMLHandler;
+import org.scilab.modules.helptools.external.HTMLScilabHandler;
 import org.scilab.modules.helptools.external.HTMLSVGHandler;
+import org.scilab.modules.helptools.image.ScilabImageConverter;
 
 /**
  * Class to convert DocBook to HTML
@@ -90,6 +92,7 @@ public final class SciDocMain {
         scimacro = conf.getMacros();
         version = conf.getVersion();
         imagedir = ".";//the path must be relative to outputDirectory
+        String fileToExec = null;
 
         if (!new File(sourceDoc).isFile()) {
             System.err.println("Could not find master document: " + sourceDoc);
@@ -118,9 +121,13 @@ public final class SciDocMain {
                 }
             }
 
-            converter.registerExternalXMLHandler(new HTMLMathMLHandler(outputDirectory, imagedir));
-            converter.registerExternalXMLHandler(new HTMLSVGHandler(outputDirectory, imagedir));
+            converter.registerExternalXMLHandler(HTMLMathMLHandler.getInstance(outputDirectory, imagedir));
+            converter.registerExternalXMLHandler(HTMLSVGHandler.getInstance(outputDirectory, imagedir));
+            converter.registerExternalXMLHandler(HTMLScilabHandler.getInstance(outputDirectory, imagedir));
             converter.convert();
+
+            fileToExec = ScilabImageConverter.getInstance().getFileWithScilabCode();
+
             ScilabCommonsUtils.copyFile(new File(SCI + "/modules/helptools/data/css/scilab_code.css"), new File(outputDirectory + "/scilab_code.css"));
             ScilabCommonsUtils.copyFile(new File(SCI + "/modules/helptools/data/css/xml_code.css"), new File(outputDirectory + "/xml_code.css"));
             ScilabCommonsUtils.copyFile(new File(SCI + "/modules/helptools/data/css/c_code.css"), new File(outputDirectory + "/c_code.css"));
@@ -148,7 +155,9 @@ public final class SciDocMain {
                     }
                     ScilabCommonsUtils.copyFile(homepageImage, new File(outputDirectory + "/ban_en_US.png"));
                 }
-                BuildJavaHelp.buildJavaHelp(outputDirectory, language);
+                if (fileToExec == null) {
+                    generateJavahelp(outputDirectory, language);
+                }
             }
 
         } catch (Exception e) {
@@ -156,6 +165,10 @@ public final class SciDocMain {
             e.printStackTrace();
         }
 
-        return outputDirectory;
+        return fileToExec;
+    }
+
+    public static void generateJavahelp(String outputDirectory, String language) {
+        BuildJavaHelp.buildJavaHelp(outputDirectory, language);
     }
 }
index c3b76ce..13698ca 100644 (file)
@@ -14,34 +14,46 @@ package org.scilab.modules.helptools.external;
 
 import org.xml.sax.Attributes;
 
+import org.scilab.modules.helptools.DocbookTagConverter;
+
 public abstract class ExternalXMLHandler {
 
+    private DocbookTagConverter converter;
+
     public abstract StringBuilder startExternalXML(String localName, Attributes attributes);
 
     public abstract String endExternalXML(String localName);
 
     public abstract String getURI();
 
+    public DocbookTagConverter getConverter() {
+        return converter;
+    }
+
+    public void setConverter(DocbookTagConverter converter) {
+        this.converter = converter;
+    }
+
     public void recreateTag(StringBuilder buf, String localName, Attributes attrs) {
-       if (attrs != null) {
-           buf.append("<");
-           buf.append(localName);
-           int len = attrs.getLength();
-           for (int i = 0; i < len; i++) {
-               String at = attrs.getLocalName(i);
-               if (at != null && at.length() > 0) {
-                   buf.append(" ");
-                   buf.append(at);
-                   buf.append("=\'");
-                   buf.append(attrs.getValue(i));
-                   buf.append("\'");
-               }
-           }
-       } else {
-           buf.append("</");
-           buf.append(localName);
-       }
-
-       buf.append(">");
+        if (attrs != null) {
+            buf.append("<");
+            buf.append(localName);
+            int len = attrs.getLength();
+            for (int i = 0; i < len; i++) {
+                String at = attrs.getLocalName(i);
+                if (at != null && at.length() > 0) {
+                    buf.append(" ");
+                    buf.append(at);
+                    buf.append("=\'");
+                    buf.append(attrs.getValue(i));
+                    buf.append("\'");
+                }
+            }
+        } else {
+            buf.append("</");
+            buf.append(localName);
+        }
+
+        buf.append(">");
     }
 }
\ No newline at end of file
index 5352f31..635d5c6 100644 (file)
@@ -29,6 +29,8 @@ public class HTMLMathMLHandler extends ExternalXMLHandler {
     private static final String MATH = "math";
     private static final String BASENAME = "Equation_MathML_";
 
+    private static HTMLMathMLHandler instance;
+
     private int compt;
     private StringBuilder buffer = new StringBuilder(8192);
     private String baseDir;
@@ -38,10 +40,18 @@ public class HTMLMathMLHandler extends ExternalXMLHandler {
      * Constructor
      * @param baseDir the base directory where to put the generated images
      */
-    public HTMLMathMLHandler(String outputDir, String baseDir) {
+    private HTMLMathMLHandler(String outputDir, String baseDir) {
         this.outputDir = outputDir + File.separator + baseDir;
         this.baseDir = baseDir + "/";
-     }
+    }
+
+    public static HTMLMathMLHandler getInstance(String outputDir, String baseDir) {
+        if (instance == null) {
+            instance = new HTMLMathMLHandler(outputDir, baseDir);
+        }
+
+        return instance;
+    }
 
     /**
      * {@inheritDoc}
@@ -72,7 +82,7 @@ public class HTMLMathMLHandler extends ExternalXMLHandler {
             Map<String, String> attributes = new HashMap();
             attributes.put("fontsize", "16");
 
-            String ret = ImageConverter.getImageByCode(buffer.toString(), attributes, "image/mathml", f, baseDir + f.getName());
+            String ret = ImageConverter.getImageByCode(getConverter().getCurrentFileName(), buffer.toString(), attributes, "image/mathml", f, baseDir + f.getName());
             buffer.setLength(0);
 
             return ret;
index b44c1f0..c8c0e25 100644 (file)
@@ -29,6 +29,8 @@ public class HTMLSVGHandler extends ExternalXMLHandler {
     private static final String SVG = "svg";
     private static final String BASENAME = "Equation_SVG_";
 
+    private static HTMLSVGHandler instance;
+
     private int compt;
     private StringBuilder buffer = new StringBuilder(8192);
     private String baseDir;
@@ -38,10 +40,18 @@ public class HTMLSVGHandler extends ExternalXMLHandler {
      * Constructor
      * @param baseDir the base directory where to put the generated images
      */
-    public HTMLSVGHandler(String outputDir, String baseDir) {
+    private HTMLSVGHandler(String outputDir, String baseDir) {
         this.outputDir = outputDir + File.separator + baseDir;
         this.baseDir = baseDir + "/";
-     }
+    }
+
+    public static HTMLSVGHandler getInstance(String outputDir, String baseDir) {
+        if (instance == null) {
+            instance = new HTMLSVGHandler(outputDir, baseDir);
+        }
+
+        return instance;
+    }
 
     /**
      * {@inheritDoc}
@@ -71,7 +81,7 @@ public class HTMLSVGHandler extends ExternalXMLHandler {
             File f = new File(outputDir, BASENAME + (compt++) + ".png");
             Map<String, String> attributes = new HashMap();
 
-            String ret = ImageConverter.getImageByCode(buffer.toString(), attributes, "image/svg", f, baseDir + f.getName());
+            String ret = ImageConverter.getImageByCode(getConverter().getCurrentFileName(), buffer.toString(), attributes, "image/svg", f, baseDir + f.getName());
             buffer.setLength(0);
 
             return ret;
diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLScilabHandler.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLScilabHandler.java
new file mode 100644 (file)
index 0000000..c9ce362
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2010 - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.helptools.external;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.xml.sax.Attributes;
+
+import org.scilab.modules.helptools.image.ImageConverter;
+
+/**
+ * Handle the included SCILAB code
+ * @author Calixte DENIZET
+ */
+public class HTMLScilabHandler extends ExternalXMLHandler {
+
+    private static final String SCILAB = "image";
+    private static final String BASENAME = "_";
+
+    private static HTMLScilabHandler instance;
+
+    private int compt = 1;
+    private StringBuilder buffer = new StringBuilder(8192);
+    private String baseDir;
+    private String outputDir;
+
+    /**
+     * Constructor
+     * @param baseDir the base directory where to put the generated images
+     */
+    private HTMLScilabHandler(String outputDir, String baseDir) {
+        this.outputDir = outputDir + File.separator + baseDir;
+        this.baseDir = baseDir + "/";
+    }
+
+    public static HTMLScilabHandler getInstance(String outputDir, String baseDir) {
+        if (instance == null) {
+            instance = new HTMLScilabHandler(outputDir, baseDir);
+        }
+
+        return instance;
+    }
+
+    public static HTMLScilabHandler getInstance() {
+        return instance;
+    }
+
+    public void resetCompt() {
+        compt = 1;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getURI() {
+        return "http://www.scilab.org";
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public StringBuilder startExternalXML(String localName, Attributes attributes) {
+        recreateTag(buffer, localName, attributes);
+        if (SCILAB.equals(localName)) {
+            return buffer;
+        }
+
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String endExternalXML(String localName) {
+        if (SCILAB.equals(localName)) {
+            recreateTag(buffer, localName, null);
+            String currentFileName = getConverter().getCurrentFileName();
+            String baseName = new File(currentFileName).getName();
+            int dotpos = baseName.lastIndexOf('.');
+            if (dotpos != -1) {
+                baseName = baseName.substring(0, dotpos);
+            }
+            File f = new File(outputDir, baseName + BASENAME + (compt++) + ".png");
+            Map<String, String> attributes = new HashMap<String, String>();
+
+            String ret = ImageConverter.getImageByCode(currentFileName, buffer.toString(), attributes, "image/scilab", f, baseDir + f.getName());
+            buffer.setLength(0);
+
+            return ret;
+        }
+
+        recreateTag(buffer, localName, null);
+
+        return null;
+    }
+}
index e115f43..c0ddb41 100644 (file)
@@ -21,5 +21,5 @@ public interface ExternalImageConverter {
 
     public String convertToImage(File f, Map<String, String> attributes, File imageFile, String imageName);
 
-    public String convertToImage(String str, Map<String, String> attributes, File imageFile, String imageName);
+    public String convertToImage(String currentFile, String code, Map<String, String> attributes, File imageFile, String imageName);
 }
index 2e06468..764682d 100644 (file)
@@ -21,6 +21,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.StringReader;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.channels.FileChannel;
 import java.util.HashMap;
 import java.util.Map;
@@ -44,6 +46,7 @@ public final class ImageConverter {
         mimeMap.addMimeTypes("type=image/latex exts=tex,latex");
         mimeMap.addMimeTypes("type=image/mathml exts=mml,mathml");
         mimeMap.addMimeTypes("type=image/svg exts=svg");
+        mimeMap.addMimeTypes("type=image/scilab exts=sce");
     }
 
     /**
@@ -96,14 +99,23 @@ public final class ImageConverter {
      * @param imageFile the filename
      * @return the HTML code to insert the image
      */
-    public static String getImageByCode(String code, Map<String, String> attrs, String mime, File imageFile, String imageName) {
-        ExternalImageConverter conv = externalConverters.get(mime);
-        if (conv != null) {
-            return conv.convertToImage(code, attrs, imageFile, imageName);
+    public static String getImageByCode(String currentFile, String code, Map<String, String> attrs, String mime, File imageFile, String imageName) {
+        File current = null;
+        try {
+            current = new File(new URI(currentFile));
+        } catch (URISyntaxException e) { }
+
+        if (current == null || current.lastModified() > imageFile.lastModified()) {
+            ExternalImageConverter conv = externalConverters.get(mime);
+            if (conv != null) {
+                return conv.convertToImage(currentFile, code, attrs, imageFile, imageName);
+            }
+
+            System.err.println("In file " + currentFile + "invalid code:\n" + code);
+            return null;
         }
-        System.err.println("Code not handled:\n" + code);
 
-        return null;
+        return "<img src=\'" + imageName + "\'/>";
     }
 
     /**
@@ -171,8 +183,7 @@ public final class ImageConverter {
             dest.transferFrom(src, 0, src.size());
         } catch (IOException e) {
             System.err.println(e);
-        }
-        finally {
+        } finally {
             try {
                 if (src != null) {
                     src.close();
index 897f176..0ea2b10 100644 (file)
@@ -49,7 +49,7 @@ public class LaTeXImageConverter implements ExternalImageConverter {
      */
     public static ExternalImageConverter getInstance() {
         if (instance == null) {
-             instance = new LaTeXImageConverter();
+            instance = new LaTeXImageConverter();
         }
         return instance;
     }
@@ -57,7 +57,7 @@ public class LaTeXImageConverter implements ExternalImageConverter {
     /**
      * {@inheritDoc}
      */
-    public String convertToImage(String latex, Map<String, String> attributes, File imageFile, String imageName) {
+    public String convertToImage(String currentFile, String latex, Map<String, String> attributes, File imageFile, String imageName) {
         TeXIcon icon = null;
         try {
             TeXFormula formula = new TeXFormula(latex);
@@ -110,7 +110,7 @@ public class LaTeXImageConverter implements ExternalImageConverter {
         }
 
         if (ok) {
-            return convertToImage(buffer.toString(), attributes, imageFile, imageName);
+            return convertToImage(latex.getName(), buffer.toString(), attributes, imageFile, imageName);
         }
 
         return null;
index 89f0653..93f4f3b 100644 (file)
@@ -57,7 +57,7 @@ public class MathMLImageConverter implements ExternalImageConverter {
      */
     public static ExternalImageConverter getInstance() {
         if (instance == null) {
-             instance = new MathMLImageConverter();
+            instance = new MathMLImageConverter();
         }
         return instance;
     }
@@ -65,7 +65,7 @@ public class MathMLImageConverter implements ExternalImageConverter {
     /**
      * {@inheritDoc}
      */
-    public String convertToImage(String mathml, Map<String, String> attributes, File imageFile, String imageName) {
+    public String convertToImage(String currentFile, String mathml, Map<String, String> attributes, File imageFile, String imageName) {
         Document doc = null;
         try {
             doc = MathMLParserSupport.parseString(mathml);
@@ -132,7 +132,7 @@ public class MathMLImageConverter implements ExternalImageConverter {
         int ascent = (int) Math.ceil(jev.getAscentHeight());
         int height = (int) Math.ceil(jev.getDescentHeight()) + ascent;
 
-        if (width <= 0 || height <=0) {
+        if (width <= 0 || height <= 0) {
             return null;
         }
 
index dc97d4c..c1b4907 100644 (file)
@@ -50,7 +50,7 @@ public class SVGImageConverter implements ExternalImageConverter {
      */
     public static ExternalImageConverter getInstance() {
         if (instance == null) {
-             instance = new SVGImageConverter();
+            instance = new SVGImageConverter();
         }
 
         return instance;
@@ -59,7 +59,7 @@ public class SVGImageConverter implements ExternalImageConverter {
     /**
      * {@inheritDoc}
      */
-    public String convertToImage(String svg, Map<String, String> attributes, File imageFile, String imageName) {
+    public String convertToImage(String currentFile, String svg, Map<String, String> attributes, File imageFile, String imageName) {
         return convertToPNG(new TranscoderInput(new StringReader(svg)), imageFile, imageName);
     }
 
diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ScilabImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ScilabImageConverter.java
new file mode 100644 (file)
index 0000000..951472f
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.helptools.image;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.scilab.modules.commons.ScilabCommons;
+
+/**
+ * Scilab code to PNG converter
+ */
+public class ScilabImageConverter implements ExternalImageConverter {
+
+    private static ScilabImageConverter instance;
+    private final StringBuilder buffer;
+
+    private ScilabImageConverter() {
+        buffer = new StringBuilder(8192);
+    }
+
+    public String getMimeType() {
+        return "image/scilab";
+    }
+
+    public String getFileWithScilabCode() {
+        if (buffer.length() != 0) {
+            try {
+                File f = File.createTempFile("help-", ".sce", new File(ScilabCommons.getTMPDIR()));
+                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
+                byte[] arr = buffer.toString().getBytes();
+                out.write(arr, 0, arr.length);
+                out.flush();
+                out.close();
+
+                return f.getAbsolutePath();
+            } catch (Exception e) {
+                System.err.println("Cannot generate the file with Scilab code to execute:\n" + e);
+            } finally {
+                instance = null;
+            }
+        }
+
+        instance = null;
+
+        return null;
+    }
+
+    /**
+     * Since this a singleton class...
+     * @return this
+     */
+    public static ScilabImageConverter getInstance() {
+        if (instance == null) {
+            instance = new ScilabImageConverter();
+        }
+
+        return instance;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String convertToImage(String currentFile, String code, Map<String, String> attributes, File imageFile, String imageName) {
+        code = code.replace("<image>", "").replace("</image>", "");
+        return convertToPNG(currentFile, code, imageFile, imageName);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String convertToImage(File code, Map<String, String> attributes, File imageFile, String imageName) {
+        try {
+            BufferedReader in = new BufferedReader(new FileReader(code));
+            StringBuilder buffer = new StringBuilder(8192);
+            String line;
+
+            while ((line = in.readLine()) != null) {
+                buffer.append(line).append("\n");
+            }
+
+            in.close();
+
+            return convertToPNG(code.getName(), buffer.toString(), imageFile, imageName);
+        } catch (Exception e) {
+            System.err.println("Problem when exporting Scilab code to " + imageFile + "!\n" + e.toString());
+        }
+
+        return null;
+    }
+
+    private final String convertToPNG(String currentFile, String code, File imageFile, String imageName) {
+        buffer.append("__olddrv__=driver();\n");
+        buffer.append("disp(\"Generate image " + imageName + " from Scilab code in file " + new File(currentFile).getName() + "\");\n");
+        buffer.append("driver(\"png\");\n");
+        buffer.append("xinit(\"").append(imageFile.getAbsolutePath()).append("\");\n");
+        buffer.append(code).append("\n");
+        buffer.append("xend();\n");
+        buffer.append("driver(__olddrv__);\n");
+
+        return "<img src=\'" + imageName + "\'/>";
+    }
+}
\ No newline at end of file
index ca1ad2d..a4b9589 100644 (file)
@@ -1,30 +1,35 @@
 <package name="org.scilab.modules.helptools">
   <object name="SciDocMain">
-
+    
     <method name="buildDocumentation" returnType="void">
       <param type="String" name="type" />
     </method>
-
+    
     <method name="setOutputDirectory" returnType="boolean">
       <param type="String" name="directory" />
     </method>
-
+    
     <method name="setWorkingLanguage" returnType="void">
       <param type="String" name="language" />
     </method>
-
+    
     <method name="setExportFormat" returnType="void">
       <param type="String" name="format" />
     </method>
-
+    
     <method name="setIsToolbox" returnType="void">
       <param type="boolean" name="isToolbox" />
     </method>
-
+    
     <method name="process" returnType="String">
       <param type="String" name="sourceDoc" />
       <param type="String" name="styleSheet" />
     </method>
-
+    
+    <method name="generateJavahelp" returnType="void" modifier="static">
+      <param type="String" name="outputDir" />
+      <param type="String" name="language" />
+    </method>
+    
   </object>
 </package>
index 7bfc50c..90f16e5 100644 (file)
@@ -1,31 +1,25 @@
 #include "SciDocMain.hxx"
-/* Generated by GIWS (version 2.0.0) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/BuildDocObjectv2.giws.xml 
+/* Generated by GIWS (version 2.0.1) with command:
+giws -e -r -f BuildDocObjectv2.giws.xml
 */
 /*
 
-Copyright 2007-2008 INRIA
-Copyright 2008-2011 DIGITEO
-Copyright 2011-2012 Scilab Enterprises
-
-Author : Sylvestre Ledru & others
-
 This is generated code.
 
 This software is a computer program whose purpose is to hide the complexity
 of accessing Java objects/methods from C++ code.
 
 This software is governed by the CeCILL-B license under French law and
-abiding by the rules of distribution of free software.  You can  use, 
+abiding by the rules of distribution of free software.  You can  use,
 modify and/ or redistribute the software under the terms of the CeCILL-B
 license as circulated by CEA, CNRS and INRIA at the following URL
-"http://www.cecill.info". 
+"http://www.cecill.info".
 
 As a counterpart to the access to the source code and  rights to copy,
 modify and redistribute granted by the license, users are provided only
 with a limited warranty  and the software's author,  the holder of the
 economic rights,  and the successive licensors  have only  limited
-liability. 
+liability.
 
 In this respect, the user's attention is drawn to the risks associated
 with loading,  using,  modifying and/or developing or reproducing the
@@ -34,280 +28,362 @@ that may mean  that it is complicated to manipulate,  and  that  also
 therefore means  that it is reserved for developers  and  experienced
 professionals having in-depth computer knowledge. Users are therefore
 encouraged to load and test the software's suitability as regards their
-requirements in conditions enabling the security of their systems and/or 
-data to be ensured and,  more generally, to use and operate it in the 
-same conditions as regards security. 
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
 
 The fact that you are presently reading this means that you have had
 knowledge of the CeCILL-B license and that you accept its terms.
 */
 
-namespace org_scilab_modules_helptools {
+namespace org_scilab_modules_helptools
+{
+
+// Static declarations (if any)
 
-                // Static declarations (if any)
-                
 // Returns the current env
 
-JNIEnv * SciDocMain::getCurrentEnv() {
-JNIEnv * curEnv = NULL;
-jint res=this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
-if (res != JNI_OK) {
-throw GiwsException::JniException(getCurrentEnv());
-}
-return curEnv;
+JNIEnv * SciDocMain::getCurrentEnv()
+{
+    JNIEnv * curEnv = NULL;
+    jint res = this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+    if (res != JNI_OK)
+    {
+        throw GiwsException::JniException(getCurrentEnv());
+    }
+    return curEnv;
 }
 // Destructor
 
-SciDocMain::~SciDocMain() {
-JNIEnv * curEnv = NULL;
-this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+SciDocMain::~SciDocMain()
+{
+    JNIEnv * curEnv = NULL;
+    this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
 
-curEnv->DeleteGlobalRef(this->instance);
-curEnv->DeleteGlobalRef(this->instanceClass);
+    curEnv->DeleteGlobalRef(this->instance);
+    curEnv->DeleteGlobalRef(this->instanceClass);
 }
 // Constructors
-SciDocMain::SciDocMain(JavaVM * jvm_) {
-jmethodID constructObject = NULL ;
-jobject localInstance ;
-jclass localClass ;
+SciDocMain::SciDocMain(JavaVM * jvm_)
+{
+    jmethodID constructObject = NULL ;
+    jobject localInstance ;
+    jclass localClass ;
 
-const std::string construct="<init>";
-const std::string param="()V";
-jvm=jvm_;
+    const std::string construct = "<init>";
+    const std::string param = "()V";
+    jvm = jvm_;
 
-JNIEnv * curEnv = getCurrentEnv();
+    JNIEnv * curEnv = getCurrentEnv();
 
-localClass = curEnv->FindClass( this->className().c_str() ) ;
-if (localClass == NULL) {
-  throw GiwsException::JniClassNotFoundException(curEnv, this->className());
-}
+    localClass = curEnv->FindClass( this->className().c_str() ) ;
+    if (localClass == NULL)
+    {
+        throw GiwsException::JniClassNotFoundException(curEnv, this->className());
+    }
 
-this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+    this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
 
-/* localClass is not needed anymore */
-curEnv->DeleteLocalRef(localClass);
+    /* localClass is not needed anymore */
+    curEnv->DeleteLocalRef(localClass);
 
-if (this->instanceClass == NULL) {
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-}
+    if (this->instanceClass == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
 
 
-constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
-if(constructObject == NULL){
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-}
+    constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
+    if (constructObject == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
 
-localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
-if(localInstance == NULL){
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-}
-this->instance = curEnv->NewGlobalRef(localInstance) ;
-if(this->instance == NULL){
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-}
-/* localInstance not needed anymore */
-curEnv->DeleteLocalRef(localInstance);
+    localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
+    if (localInstance == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
+
+    this->instance = curEnv->NewGlobalRef(localInstance) ;
+    if (this->instance == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
+    /* localInstance not needed anymore */
+    curEnv->DeleteLocalRef(localInstance);
 
-                /* Methods ID set to NULL */
-voidbuildDocumentationjstringjava_lang_StringID=NULL;
-jbooleansetOutputDirectoryjstringjava_lang_StringID=NULL;
-voidsetWorkingLanguagejstringjava_lang_StringID=NULL;
-voidsetExportFormatjstringjava_lang_StringID=NULL;
-voidsetIsToolboxjbooleanbooleanID=NULL;
-jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID=NULL;
+    /* Methods ID set to NULL */
+    voidbuildDocumentationjstringjava_lang_StringID = NULL;
+    jbooleansetOutputDirectoryjstringjava_lang_StringID = NULL;
+    voidsetWorkingLanguagejstringjava_lang_StringID = NULL;
+    voidsetExportFormatjstringjava_lang_StringID = NULL;
+    voidsetIsToolboxjbooleanbooleanID = NULL;
+    jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID = NULL;
+    voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID = NULL;
 
 
 }
 
-SciDocMain::SciDocMain(JavaVM * jvm_, jobject JObj) {
-        jvm=jvm_;
+SciDocMain::SciDocMain(JavaVM * jvm_, jobject JObj)
+{
+    jvm = jvm_;
 
-        JNIEnv * curEnv = getCurrentEnv();
+    JNIEnv * curEnv = getCurrentEnv();
 
-jclass localClass = curEnv->GetObjectClass(JObj);
-        this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
-        curEnv->DeleteLocalRef(localClass);
+    jclass localClass = curEnv->GetObjectClass(JObj);
+    this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+    curEnv->DeleteLocalRef(localClass);
 
-        if (this->instanceClass == NULL) {
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-        }
+    if (this->instanceClass == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
 
-        this->instance = curEnv->NewGlobalRef(JObj) ;
-        if(this->instance == NULL){
-throw GiwsException::JniObjectCreationException(curEnv, this->className());
-        }
-        /* Methods ID set to NULL */
-        voidbuildDocumentationjstringjava_lang_StringID=NULL;
-jbooleansetOutputDirectoryjstringjava_lang_StringID=NULL;
-voidsetWorkingLanguagejstringjava_lang_StringID=NULL;
-voidsetExportFormatjstringjava_lang_StringID=NULL;
-voidsetIsToolboxjbooleanbooleanID=NULL;
-jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID=NULL;
+    this->instance = curEnv->NewGlobalRef(JObj) ;
+    if (this->instance == NULL)
+    {
+        throw GiwsException::JniObjectCreationException(curEnv, this->className());
+    }
+    /* Methods ID set to NULL */
+    voidbuildDocumentationjstringjava_lang_StringID = NULL;
+    jbooleansetOutputDirectoryjstringjava_lang_StringID = NULL;
+    voidsetWorkingLanguagejstringjava_lang_StringID = NULL;
+    voidsetExportFormatjstringjava_lang_StringID = NULL;
+    voidsetIsToolboxjbooleanbooleanID = NULL;
+    jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID = NULL;
+    voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID = NULL;
 
 
 }
 
 // Generic methods
 
-void SciDocMain::synchronize() {
-if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK) {
-throw GiwsException::JniMonitorException(getCurrentEnv(), "SciDocMain");
-}
+void SciDocMain::synchronize()
+{
+    if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK)
+    {
+        throw GiwsException::JniMonitorException(getCurrentEnv(), "SciDocMain");
+    }
 }
 
-void SciDocMain::endSynchronize() {
-if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK) {
-throw GiwsException::JniMonitorException(getCurrentEnv(), "SciDocMain");
-}
+void SciDocMain::endSynchronize()
+{
+    if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK)
+    {
+        throw GiwsException::JniMonitorException(getCurrentEnv(), "SciDocMain");
+    }
 }
 // Method(s)
 
-void SciDocMain::buildDocumentation (char const* type){
-
-JNIEnv * curEnv = getCurrentEnv();
-
-if (voidbuildDocumentationjstringjava_lang_StringID==NULL) { /* Use the cache */
- voidbuildDocumentationjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "buildDocumentation", "(Ljava/lang/String;)V" ) ;
-if (voidbuildDocumentationjstringjava_lang_StringID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "buildDocumentation");
-}
-}
-jstring type_ = curEnv->NewStringUTF( type );
-if (type != NULL && type_ == NULL)
+void SciDocMain::buildDocumentation (char const* type)
 {
-throw GiwsException::JniBadAllocException(curEnv);
-}
 
+    JNIEnv * curEnv = getCurrentEnv();
 
-                         curEnv->CallVoidMethod( this->instance, voidbuildDocumentationjstringjava_lang_StringID ,type_);
-                        curEnv->DeleteLocalRef(type_);
-
-}
+    if (voidbuildDocumentationjstringjava_lang_StringID == NULL) /* Use the cache */
+    {
+        voidbuildDocumentationjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "buildDocumentation", "(Ljava/lang/String;)V" ) ;
+        if (voidbuildDocumentationjstringjava_lang_StringID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "buildDocumentation");
+        }
+    }
+    jstring type_ = curEnv->NewStringUTF( type );
+    if (type != NULL && type_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
 
-bool SciDocMain::setOutputDirectory (char const* directory){
 
-JNIEnv * curEnv = getCurrentEnv();
+    curEnv->CallVoidMethod( this->instance, voidbuildDocumentationjstringjava_lang_StringID , type_);
+    curEnv->DeleteLocalRef(type_);
 
-if (jbooleansetOutputDirectoryjstringjava_lang_StringID==NULL) { /* Use the cache */
- jbooleansetOutputDirectoryjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setOutputDirectory", "(Ljava/lang/String;)Z" ) ;
-if (jbooleansetOutputDirectoryjstringjava_lang_StringID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "setOutputDirectory");
-}
-}
-jstring directory_ = curEnv->NewStringUTF( directory );
-if (directory != NULL && directory_ == NULL)
-{
-throw GiwsException::JniBadAllocException(curEnv);
 }
 
+bool SciDocMain::setOutputDirectory (char const* directory)
+{
 
-                        jboolean res =  static_cast<jboolean>( curEnv->CallBooleanMethod( this->instance, jbooleansetOutputDirectoryjstringjava_lang_StringID ,directory_));
-                        curEnv->DeleteLocalRef(directory_);
+    JNIEnv * curEnv = getCurrentEnv();
 
-return (res == JNI_TRUE);
+    if (jbooleansetOutputDirectoryjstringjava_lang_StringID == NULL) /* Use the cache */
+    {
+        jbooleansetOutputDirectoryjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setOutputDirectory", "(Ljava/lang/String;)Z" ) ;
+        if (jbooleansetOutputDirectoryjstringjava_lang_StringID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "setOutputDirectory");
+        }
+    }
+    jstring directory_ = curEnv->NewStringUTF( directory );
+    if (directory != NULL && directory_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
 
-}
 
-void SciDocMain::setWorkingLanguage (char const* language){
+    jboolean res =  static_cast<jboolean>( curEnv->CallBooleanMethod( this->instance, jbooleansetOutputDirectoryjstringjava_lang_StringID , directory_));
+    curEnv->DeleteLocalRef(directory_);
 
-JNIEnv * curEnv = getCurrentEnv();
+    return (res == JNI_TRUE);
 
-if (voidsetWorkingLanguagejstringjava_lang_StringID==NULL) { /* Use the cache */
- voidsetWorkingLanguagejstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setWorkingLanguage", "(Ljava/lang/String;)V" ) ;
-if (voidsetWorkingLanguagejstringjava_lang_StringID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "setWorkingLanguage");
-}
-}
-jstring language_ = curEnv->NewStringUTF( language );
-if (language != NULL && language_ == NULL)
-{
-throw GiwsException::JniBadAllocException(curEnv);
 }
 
+void SciDocMain::setWorkingLanguage (char const* language)
+{
 
-                         curEnv->CallVoidMethod( this->instance, voidsetWorkingLanguagejstringjava_lang_StringID ,language_);
-                        curEnv->DeleteLocalRef(language_);
+    JNIEnv * curEnv = getCurrentEnv();
 
-}
+    if (voidsetWorkingLanguagejstringjava_lang_StringID == NULL) /* Use the cache */
+    {
+        voidsetWorkingLanguagejstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setWorkingLanguage", "(Ljava/lang/String;)V" ) ;
+        if (voidsetWorkingLanguagejstringjava_lang_StringID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "setWorkingLanguage");
+        }
+    }
+    jstring language_ = curEnv->NewStringUTF( language );
+    if (language != NULL && language_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
 
-void SciDocMain::setExportFormat (char const* format){
 
-JNIEnv * curEnv = getCurrentEnv();
+    curEnv->CallVoidMethod( this->instance, voidsetWorkingLanguagejstringjava_lang_StringID , language_);
+    curEnv->DeleteLocalRef(language_);
 
-if (voidsetExportFormatjstringjava_lang_StringID==NULL) { /* Use the cache */
- voidsetExportFormatjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setExportFormat", "(Ljava/lang/String;)V" ) ;
-if (voidsetExportFormatjstringjava_lang_StringID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "setExportFormat");
-}
-}
-jstring format_ = curEnv->NewStringUTF( format );
-if (format != NULL && format_ == NULL)
-{
-throw GiwsException::JniBadAllocException(curEnv);
 }
 
+void SciDocMain::setExportFormat (char const* format)
+{
 
-                         curEnv->CallVoidMethod( this->instance, voidsetExportFormatjstringjava_lang_StringID ,format_);
-                        curEnv->DeleteLocalRef(format_);
-
-}
+    JNIEnv * curEnv = getCurrentEnv();
 
-void SciDocMain::setIsToolbox (bool isToolbox){
+    if (voidsetExportFormatjstringjava_lang_StringID == NULL) /* Use the cache */
+    {
+        voidsetExportFormatjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "setExportFormat", "(Ljava/lang/String;)V" ) ;
+        if (voidsetExportFormatjstringjava_lang_StringID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "setExportFormat");
+        }
+    }
+    jstring format_ = curEnv->NewStringUTF( format );
+    if (format != NULL && format_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
 
-JNIEnv * curEnv = getCurrentEnv();
 
-if (voidsetIsToolboxjbooleanbooleanID==NULL) { /* Use the cache */
- voidsetIsToolboxjbooleanbooleanID = curEnv->GetMethodID(this->instanceClass, "setIsToolbox", "(Z)V" ) ;
-if (voidsetIsToolboxjbooleanbooleanID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "setIsToolbox");
-}
-}
-jboolean isToolbox_ = (static_cast<bool>(isToolbox) ? JNI_TRUE : JNI_FALSE);
+    curEnv->CallVoidMethod( this->instance, voidsetExportFormatjstringjava_lang_StringID , format_);
+    curEnv->DeleteLocalRef(format_);
 
-                         curEnv->CallVoidMethod( this->instance, voidsetIsToolboxjbooleanbooleanID ,isToolbox_);
-                        
 }
 
-char* SciDocMain::process (char const* sourceDoc, char const* styleSheet){
-
-JNIEnv * curEnv = getCurrentEnv();
-
-if (jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID==NULL) { /* Use the cache */
- jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "process", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" ) ;
-if (jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID == NULL) {
-throw GiwsException::JniMethodNotFoundException(curEnv, "process");
-}
-}
-jstring sourceDoc_ = curEnv->NewStringUTF( sourceDoc );
-if (sourceDoc != NULL && sourceDoc_ == NULL)
+void SciDocMain::setIsToolbox (bool isToolbox)
 {
-throw GiwsException::JniBadAllocException(curEnv);
-}
 
+    JNIEnv * curEnv = getCurrentEnv();
 
-jstring styleSheet_ = curEnv->NewStringUTF( styleSheet );
-if (styleSheet != NULL && styleSheet_ == NULL)
-{
-throw GiwsException::JniBadAllocException(curEnv);
-}
+    if (voidsetIsToolboxjbooleanbooleanID == NULL) /* Use the cache */
+    {
+        voidsetIsToolboxjbooleanbooleanID = curEnv->GetMethodID(this->instanceClass, "setIsToolbox", "(Z)V" ) ;
+        if (voidsetIsToolboxjbooleanbooleanID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "setIsToolbox");
+        }
+    }
+    jboolean isToolbox_ = (static_cast<bool>(isToolbox) ? JNI_TRUE : JNI_FALSE);
 
+    curEnv->CallVoidMethod( this->instance, voidsetIsToolboxjbooleanbooleanID , isToolbox_);
 
-                        jstring res =  static_cast<jstring>( curEnv->CallObjectMethod( this->instance, jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID ,sourceDoc_, styleSheet_));
-                        if (curEnv->ExceptionCheck()) {
-throw GiwsException::JniCallMethodException(curEnv);
 }
 
-const char *tempString = curEnv->GetStringUTFChars(res, 0);
-char * myStringBuffer = new char[strlen(tempString) + 1];
-strcpy(myStringBuffer, tempString);
-curEnv->ReleaseStringUTFChars(res, tempString);
-curEnv->DeleteLocalRef(res);
-curEnv->DeleteLocalRef(sourceDoc_);
-curEnv->DeleteLocalRef(styleSheet_);
+char* SciDocMain::process (char const* sourceDoc, char const* styleSheet)
+{
 
-return myStringBuffer;
+    JNIEnv * curEnv = getCurrentEnv();
+
+    if (jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID == NULL) /* Use the cache */
+    {
+        jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID = curEnv->GetMethodID(this->instanceClass, "process", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" ) ;
+        if (jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID == NULL)
+        {
+            throw GiwsException::JniMethodNotFoundException(curEnv, "process");
+        }
+    }
+    jstring sourceDoc_ = curEnv->NewStringUTF( sourceDoc );
+    if (sourceDoc != NULL && sourceDoc_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
+
+
+    jstring styleSheet_ = curEnv->NewStringUTF( styleSheet );
+    if (styleSheet != NULL && styleSheet_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
+
+
+    jstring res =  static_cast<jstring>( curEnv->CallObjectMethod( this->instance, jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID , sourceDoc_, styleSheet_));
+    if (curEnv->ExceptionCheck())
+    {
+        throw GiwsException::JniCallMethodException(curEnv);
+    }
+    if (res != NULL)
+    {
+
+        const char *tempString = curEnv->GetStringUTFChars(res, 0);
+        char * myStringBuffer = new char[strlen(tempString) + 1];
+        strcpy(myStringBuffer, tempString);
+        curEnv->ReleaseStringUTFChars(res, tempString);
+        curEnv->DeleteLocalRef(res);
+        curEnv->DeleteLocalRef(sourceDoc_);
+        curEnv->DeleteLocalRef(styleSheet_);
+
+        return myStringBuffer;
+    }
+    else
+    {
+        curEnv->DeleteLocalRef(res);
+        return NULL;
+    }
+}
+
+void SciDocMain::generateJavahelp (JavaVM * jvm_, char const* outputDir, char const* language)
+{
 
+    JNIEnv * curEnv = NULL;
+    jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+    jclass cls = curEnv->FindClass( className().c_str() );
+
+    jmethodID voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "generateJavahelp", "(Ljava/lang/String;Ljava/lang/String;)V" ) ;
+    if (voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID == NULL)
+    {
+        throw GiwsException::JniMethodNotFoundException(curEnv, "generateJavahelp");
+    }
+
+    jstring outputDir_ = curEnv->NewStringUTF( outputDir );
+    if (outputDir != NULL && outputDir_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
+
+
+    jstring language_ = curEnv->NewStringUTF( language );
+    if (language != NULL && language_ == NULL)
+    {
+        throw GiwsException::JniBadAllocException(curEnv);
+    }
+
+
+    curEnv->CallStaticVoidMethod(cls, voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID , outputDir_, language_);
+    curEnv->DeleteLocalRef(outputDir_);
+    curEnv->DeleteLocalRef(language_);
+    curEnv->DeleteLocalRef(cls);
+    if (curEnv->ExceptionCheck())
+    {
+        throw GiwsException::JniCallMethodException(curEnv);
+    }
 }
 
 }
index 37930cc..8984ee8 100644 (file)
@@ -1,30 +1,24 @@
-/* Generated by GIWS (version 2.0.0) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/BuildDocObjectv2.giws.xml 
+/* Generated by GIWS (version 2.0.1) with command:
+giws -e -r -f BuildDocObjectv2.giws.xml
 */
 /*
 
-Copyright 2007-2008 INRIA
-Copyright 2008-2011 DIGITEO
-Copyright 2011-2012 Scilab Enterprises
-
-Author : Sylvestre Ledru & others
-
 This is generated code.
 
 This software is a computer program whose purpose is to hide the complexity
 of accessing Java objects/methods from C++ code.
 
 This software is governed by the CeCILL-B license under French law and
-abiding by the rules of distribution of free software.  You can  use, 
+abiding by the rules of distribution of free software.  You can  use,
 modify and/ or redistribute the software under the terms of the CeCILL-B
 license as circulated by CEA, CNRS and INRIA at the following URL
-"http://www.cecill.info". 
+"http://www.cecill.info".
 
 As a counterpart to the access to the source code and  rights to copy,
 modify and redistribute granted by the license, users are provided only
 with a limited warranty  and the software's author,  the holder of the
 economic rights,  and the successive licensors  have only  limited
-liability. 
+liability.
 
 In this respect, the user's attention is drawn to the risks associated
 with loading,  using,  modifying and/or developing or reproducing the
@@ -33,9 +27,9 @@ that may mean  that it is complicated to manipulate,  and  that  also
 therefore means  that it is reserved for developers  and  experienced
 professionals having in-depth computer knowledge. Users are therefore
 encouraged to load and test the software's suitability as regards their
-requirements in conditions enabling the security of their systems and/or 
-data to be ensured and,  more generally, to use and operate it in the 
-same conditions as regards security. 
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
 
 The fact that you are presently reading this means that you have had
 knowledge of the CeCILL-B license and that you accept its terms.
@@ -52,11 +46,11 @@ knowledge of the CeCILL-B license and that you accept its terms.
 
 #include "GiwsException.hxx"
 
-        #if !defined(byte) | !defined(_MSC_VER) /* Defined anyway with Visual */
-                typedef signed char byte;
-        #else
-                #pragma message("Byte has been redefined elsewhere. Some problems can happen")
-        #endif
+#if !defined(byte) | !defined(_MSC_VER) /* Defined anyway with Visual */
+typedef signed char byte;
+#else
+#pragma message("Byte has been redefined elsewhere. Some problems can happen")
+#endif
 
 
 #ifndef GIWSEXPORT
@@ -75,101 +69,106 @@ knowledge of the CeCILL-B license and that you accept its terms.
 # endif
 #endif
 
-namespace org_scilab_modules_helptools {
-class GIWSEXPORT SciDocMain {
+namespace org_scilab_modules_helptools
+{
+class GIWSEXPORT SciDocMain
+{
 
 private:
-JavaVM * jvm;
+    JavaVM * jvm;
 
 protected:
-jmethodID voidbuildDocumentationjstringjava_lang_StringID; // cache method id
-jmethodID jbooleansetOutputDirectoryjstringjava_lang_StringID; // cache method id
-jmethodID voidsetWorkingLanguagejstringjava_lang_StringID; // cache method id
-jmethodID voidsetExportFormatjstringjava_lang_StringID; // cache method id
-jmethodID voidsetIsToolboxjbooleanbooleanID; // cache method id
-jmethodID jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID; // cache method id
+    jmethodID voidbuildDocumentationjstringjava_lang_StringID; // cache method id
+    jmethodID jbooleansetOutputDirectoryjstringjava_lang_StringID; // cache method id
+    jmethodID voidsetWorkingLanguagejstringjava_lang_StringID; // cache method id
+    jmethodID voidsetExportFormatjstringjava_lang_StringID; // cache method id
+    jmethodID voidsetIsToolboxjbooleanbooleanID; // cache method id
+    jmethodID jstringprocessjstringjava_lang_Stringjstringjava_lang_StringID; // cache method id
+    jmethodID voidgenerateJavahelpjstringjava_lang_Stringjstringjava_lang_StringID; // cache method id
 
 
 
-jobject instance;
-jclass instanceClass; // cache class
+    jobject instance;
+    jclass instanceClass; // cache class
 
-                       
-// Caching (if any)
 
+    // Caching (if any)
 
-/**
-* Get the environment matching to the current thread.
-*/
-virtual JNIEnv * getCurrentEnv();
+
+    /**
+    * Get the environment matching to the current thread.
+    */
+    virtual JNIEnv * getCurrentEnv();
 
 public:
-// Constructor
-/**
-* Create a wrapping of the object from a JNIEnv.
-* It will call the default constructor
-* @param JEnv_ the Java Env
-*/
-SciDocMain(JavaVM * jvm_);
+    // Constructor
+    /**
+    * Create a wrapping of the object from a JNIEnv.
+    * It will call the default constructor
+    * @param JEnv_ the Java Env
+    */
+    SciDocMain(JavaVM * jvm_);
+
+    /**
+    * Create a wrapping of an already existing object from a JNIEnv.
+    * The object must have already been instantiated
+    * @param JEnv_ the Java Env
+    * @param JObj the object
+    */
+    SciDocMain(JavaVM * jvm_, jobject JObj);
+
+
+    /**
+    * This is a fake constructor to avoid the constructor
+    * chaining when dealing with extended giws classes
+    */
+#ifdef FAKEGIWSDATATYPE
+    SciDocMain(fakeGiwsDataType::fakeGiwsDataType /* unused */) {}
+#endif
 
-/**
-* Create a wrapping of an already existing object from a JNIEnv.
-* The object must have already been instantiated
-* @param JEnv_ the Java Env
-* @param JObj the object
-*/
-SciDocMain(JavaVM * jvm_, jobject JObj);
+    // Destructor
+    ~SciDocMain();
 
+    // Generic method
+    // Synchronization methods
+    /**
+    * Enter monitor associated with the object.
+    * Equivalent of creating a "synchronized(obj)" scope in Java.
+    */
+    void synchronize();
 
-/** 
-* This is a fake constructor to avoid the constructor
-* chaining when dealing with extended giws classes 
-*/
-#ifdef FAKEGIWSDATATYPE
-SciDocMain(fakeGiwsDataType::fakeGiwsDataType /* unused */) {}
-#endif
+    /**
+    * Exit monitor associated with the object.
+    * Equivalent of ending a "synchronized(obj)" scope.
+    */
+    void endSynchronize();
 
-// Destructor
-~SciDocMain();
+    // Methods
+    void buildDocumentation(char const* type);
 
-// Generic method
-// Synchronization methods
-/**
-* Enter monitor associated with the object.
-* Equivalent of creating a "synchronized(obj)" scope in Java.
-*/
-void synchronize();
+    bool setOutputDirectory(char const* directory);
 
-/**
-* Exit monitor associated with the object.
-* Equivalent of ending a "synchronized(obj)" scope.
-*/
-void endSynchronize();
+    void setWorkingLanguage(char const* language);
 
-// Methods
-void buildDocumentation(char const* type);
+    void setExportFormat(char const* format);
 
-bool setOutputDirectory(char const* directory);
+    void setIsToolbox(bool isToolbox);
 
-void setWorkingLanguage(char const* language);
+    char* process(char const* sourceDoc, char const* styleSheet);
 
-void setExportFormat(char const* format);
+    static void generateJavahelp(JavaVM * jvm_, char const* outputDir, char const* language);
 
-void setIsToolbox(bool isToolbox);
 
-char* process(char const* sourceDoc, char const* styleSheet);
+    /**
+    * Get class name to use for static methods
+    * @return class name to use for static methods
+    */
 
+    static const std::string className()
+    {
+        return "org/scilab/modules/helptools/SciDocMain";
+    }
 
-                        /**
-                        * Get class name to use for static methods
-                        * @return class name to use for static methods
-                        */
-                        
-                static const std::string className()
-                {
-                return "org/scilab/modules/helptools/SciDocMain";
-                }
-                
 };