From 2a8c5ad39d9aa36d6408a607e0924cb3e02f5879 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Thu, 2 Aug 2012 15:49:04 +0200 Subject: [PATCH] Only add the tooltip when building the online help Change-Id: Ib25e7c2c708798c07dc68363c25b2539797db220 --- .../helptools/external/HTMLScilabHandler.java | 2 + .../helptools/image/ExternalImageConverter.java | 2 + .../modules/helptools/image/ImageConverter.java | 12 +-- .../helptools/image/LaTeXImageConverter.java | 7 ++ .../helptools/image/MathMLImageConverter.java | 7 ++ .../modules/helptools/image/SVGImageConverter.java | 7 ++ .../helptools/image/ScilabImageConverter.java | 83 +++++++++++++++++++- 7 files changed, 111 insertions(+), 9 deletions(-) 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 index 9cf5885..149c1e0 100644 --- 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 @@ -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); diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ExternalImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ExternalImageConverter.java index c0ddb41..caf62ca 100644 --- a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ExternalImageConverter.java +++ b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ExternalImageConverter.java @@ -22,4 +22,6 @@ public interface ExternalImageConverter { public String convertToImage(File f, Map attributes, File imageFile, String imageName); public String convertToImage(String currentFile, String code, Map attributes, File imageFile, String imageName); + + public boolean mustRegenerate(); } diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ImageConverter.java index 5fd1c55..afd8880 100644 --- a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ImageConverter.java +++ b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/ImageConverter.java @@ -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 ""; } diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/LaTeXImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/LaTeXImageConverter.java index 351b061..cce85f5 100644 --- a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/LaTeXImageConverter.java +++ b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/LaTeXImageConverter.java @@ -49,6 +49,13 @@ public class LaTeXImageConverter implements ExternalImageConverter { } /** + * {@inheritDoc} + */ + public boolean mustRegenerate() { + return true; + } + + /** * Since it is a singleton class... * @return this */ diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/MathMLImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/MathMLImageConverter.java index ce0c5d8..7181fd2 100644 --- a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/MathMLImageConverter.java +++ b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/MathMLImageConverter.java @@ -57,6 +57,13 @@ public class MathMLImageConverter implements ExternalImageConverter { } /** + * {@inheritDoc} + */ + public boolean mustRegenerate() { + return true; + } + + /** * Since it is a singleton class... * @return this */ diff --git a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/SVGImageConverter.java b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/SVGImageConverter.java index 44dd090..c84d8f6 100644 --- a/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/SVGImageConverter.java +++ b/scilab/modules/helptools/src/java/org/scilab/modules/helptools/image/SVGImageConverter.java @@ -50,6 +50,13 @@ public class SVGImageConverter implements ExternalImageConverter { } /** + * {@inheritDoc} + */ + public boolean mustRegenerate() { + return false; + } + + /** * Since this a singleton class... * @return this */ 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 index 06591eb..f77a46a 100644 --- 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 @@ -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, ""); + } - /* Prepare the code for the html inclusion */ - code = code.trim().replace("&", "&").replace("<", "<").replace(">", ">").replace("\n", "
"); + 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 "
" + imageTag + "
"; + } 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("&"); + break; + case '<': + buffer.append("<"); + break; + case '>': + buffer.append(">"); + break; + case '\n': + buffer.append("
"); + break; + case '\'': + buffer.append("'"); + break; + case '\"': + buffer.append("""); + break; + default: + buffer.append(c); + } + } - return "
"; + return buffer.toString(); } } -- 1.7.9.5