Only add the tooltip when building the online help 97/8497/4
Sylvestre Ledru [Thu, 2 Aug 2012 13:49:04 +0000 (15:49 +0200)]
Change-Id: Ib25e7c2c708798c07dc68363c25b2539797db220

scilab/modules/helptools/src/java/org/scilab/modules/helptools/external/HTMLScilabHandler.java
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

index 9cf5885..149c1e0 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Map;
 import org.xml.sax.Attributes;
 
 import org.scilab.modules.helptools.image.ImageConverter;
+import org.scilab.modules.helptools.image.ScilabImageConverter;
 
 /**
  * Handle the included SCILAB code
@@ -110,6 +111,7 @@ public class HTMLScilabHandler extends ExternalXMLHandler {
                 ret = ImageConverter.getImageByCode(currentFileName, buffer.toString(), attributes, "image/scilab", f, baseDir + f.getName());
             } else {
                 ret = ImageConverter.getImageByFile(attributes, null, existing.getAbsolutePath(), outputDir, ".");
+                ret = ScilabImageConverter.getInstance().getHTMLCodeToReturn(buffer.toString(), ret);
             }
 
             buffer.setLength(0);
index c0ddb41..caf62ca 100644 (file)
@@ -22,4 +22,6 @@ public interface ExternalImageConverter {
     public String convertToImage(File f, Map<String, String> attributes, File imageFile, String imageName);
 
     public String convertToImage(String currentFile, String code, Map<String, String> attributes, File imageFile, String imageName);
+
+    public boolean mustRegenerate();
 }
index 5fd1c55..afd8880 100644 (file)
@@ -105,16 +105,16 @@ public final class ImageConverter {
             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);
-            }
-
+        ExternalImageConverter conv = externalConverters.get(mime);
+        if (conv == null) {
             System.err.println("In file " + currentFile + "invalid code:\n" + code);
             return null;
         }
 
+        if (conv.mustRegenerate() || current == null || current.lastModified() > imageFile.lastModified()) {
+            return conv.convertToImage(currentFile, code, attrs, imageFile, imageName);
+        }
+
         return "<img src=\'" + imageName + "\'/>";
     }
 
index 351b061..cce85f5 100644 (file)
@@ -49,6 +49,13 @@ public class LaTeXImageConverter implements ExternalImageConverter {
     }
 
     /**
+     * {@inheritDoc}
+     */
+    public boolean mustRegenerate() {
+        return true;
+    }
+
+    /**
      * Since it is a singleton class...
      * @return this
      */
index ce0c5d8..7181fd2 100644 (file)
@@ -57,6 +57,13 @@ public class MathMLImageConverter implements ExternalImageConverter {
     }
 
     /**
+     * {@inheritDoc}
+     */
+    public boolean mustRegenerate() {
+        return true;
+    }
+
+    /**
      * Since it is a singleton class...
      * @return this
      */
index 44dd090..c84d8f6 100644 (file)
@@ -50,6 +50,13 @@ public class SVGImageConverter implements ExternalImageConverter {
     }
 
     /**
+     * {@inheritDoc}
+     */
+    public boolean mustRegenerate() {
+        return false;
+    }
+
+    /**
      * Since this a singleton class...
      * @return this
      */
index 06591eb..f77a46a 100644 (file)
@@ -44,6 +44,13 @@ public class ScilabImageConverter implements ExternalImageConverter {
         return "image/scilab";
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public boolean mustRegenerate() {
+        return false;
+    }
+
     public static String getFileWithScilabCode() {
         if (instance.buffer.length() != 0) {
             try {
@@ -79,6 +86,10 @@ public class ScilabImageConverter implements ExternalImageConverter {
         return instance;
     }
 
+    public static ScilabImageConverter getInstance() {
+        return instance;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -118,10 +129,76 @@ public class ScilabImageConverter implements ExternalImageConverter {
         buffer.append("xend();\n");
         buffer.append("driver(__olddrv__);\n");
 
+        return getHTMLCodeToReturn(code, "<img src=\'" + imageName + "\'/>");
+    }
 
-        /* Prepare the code for the html inclusion */
-        code = code.trim().replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\n", "<br />");
+    public String getHTMLCodeToReturn(String code, String imageTag) {
+        if (type == HTMLDocbookTagConverter.GenerationType.WEB) {
+            /* Prepare the code for the html inclusion */
+            code = convertCode(code);
+            /* Provide a tooltip */
+            return "<div rel='tooltip' title='" + code + "'>" + imageTag + "</div>";
+        } else {
+            /* No tooltip in the javahelp browser ...
+             * too limited html capabilities */
+            return imageTag;
+        }
+    }
+
+    private static final String convertCode(String code) {
+        if (code == null || code.length() == 0) {
+            return "";
+        }
+
+        StringBuffer buffer = new StringBuffer(2 * code.length());
+        int start = 0;
+        int end = code.length() - 1;
+        char c = code.charAt(0);
+
+        // first we trim
+        while (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
+            if (start < end) {
+                c = code.charAt(++start);
+            } else {
+                break;
+            }
+        }
+        c = code.charAt(end);
+        while (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
+            if (end > 0) {
+                c = code.charAt(--end);
+            } else {
+                break;
+            }
+        }
+
+        // replace chars by their html entities equivalent
+        for (int j = start; j <= end; j++) {
+            c = code.charAt(j);
+            switch (c) {
+            case '&':
+                buffer.append("&amp;");
+                break;
+            case '<':
+                buffer.append("&lt;");
+                break;
+            case '>':
+                buffer.append("&gt;");
+                break;
+            case '\n':
+                buffer.append("<br />");
+                break;
+            case '\'':
+                buffer.append("&#039;");
+                break;
+            case '\"':
+                buffer.append("&quot;");
+                break;
+            default:
+                buffer.append(c);
+            }
+        }
 
-        return " <div rel='tooltip' title='" + code + "'><img src=\'" + imageName + "\'/></div>";
+        return buffer.toString();
     }
 }