import org.xml.sax.Attributes;
import org.scilab.modules.helptools.image.ImageConverter;
+import org.scilab.modules.helptools.image.ScilabImageConverter;
/**
* Handle the included SCILAB code
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);
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 + "\'/>";
}
return "image/scilab";
}
+ /**
+ * {@inheritDoc}
+ */
+ public boolean mustRegenerate() {
+ return false;
+ }
+
public static String getFileWithScilabCode() {
if (instance.buffer.length() != 0) {
try {
return instance;
}
+ public static ScilabImageConverter getInstance() {
+ return instance;
+ }
+
/**
* {@inheritDoc}
*/
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("&", "&").replace("<", "<").replace(">", ">").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("&");
+ break;
+ case '<':
+ buffer.append("<");
+ break;
+ case '>':
+ buffer.append(">");
+ break;
+ case '\n':
+ buffer.append("<br />");
+ break;
+ case '\'':
+ buffer.append("'");
+ break;
+ case '\"':
+ buffer.append(""");
+ break;
+ default:
+ buffer.append(c);
+ }
+ }
- return " <div rel='tooltip' title='" + code + "'><img src=\'" + imageName + "\'/></div>";
+ return buffer.toString();
}
}