Bug 13351 fixed: xstringb failed with LaTeX code 68/14468/3
Calixte DENIZET [Mon, 28 Apr 2014 12:34:59 +0000 (14:34 +0200)]
Change-Id: I9f674569ac4c64a1a903e08edd0663f23809dba5

scilab/CHANGES_5.5.X
scilab/modules/graphics/tests/nonreg_tests/bug_13351.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_13351.tst [new file with mode: 0644]
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/util/TextObjectSpriteDrawer.java

index 68ecca6..494b7e4 100644 (file)
@@ -39,6 +39,8 @@ Scilab Bug Fixes
 
 * Bug #13349 fixed - Double-clicking on a MAT-file in file browser did not load it.
 
+* Bug #13351 fixed - xstringb failed with LaTeX code.
+
 * Bug #13378 fixed - The "Console" handle display was not homogeneous with others.
 
 * Bug #13381 fixed - eigs was failing when using a function as first input argument.
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13351.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_13351.dia.ref
new file mode 100644 (file)
index 0000000..5c808d9
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 13351 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13351
+//
+// <-- Short Description -->
+// xstringb failed with LaTeX code
+str=["Scilab" "is";"$\sqrt{not}$" "elisaB"];
+plot2d(0,0,[-1,1],"010"," ",[0,0,1,1]);
+r=[0,0,1,0.5];
+xstringb(r(1),r(2),str,r(3),r(4),"fill");
+xrect(r(1),r(2)+r(4),r(3),r(4));
+r=[r(1),r(2)+r(4)+0.01,r(3),r(4)/2];
+xrect(r(1),r(2)+r(4),r(3),r(4))
+xstringb(r(1),r(2),str,r(3),r(4),"fill");
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13351.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_13351.tst
new file mode 100644 (file)
index 0000000..89fe270
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 13351 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13351
+//
+// <-- Short Description -->
+// xstringb failed with LaTeX code
+
+str=["Scilab" "is";"$\sqrt{not}$" "elisaB"];
+plot2d(0,0,[-1,1],"010"," ",[0,0,1,1]);
+
+r=[0,0,1,0.5];
+xstringb(r(1),r(2),str,r(3),r(4),"fill");
+xrect(r(1),r(2)+r(4),r(3),r(4));
+
+r=[r(1),r(2)+r(4)+0.01,r(3),r(4)/2];
+xrect(r(1),r(2)+r(4),r(3),r(4))
+xstringb(r(1),r(2),str,r(3),r(4),"fill");
\ No newline at end of file
index 964e979..4622796 100644 (file)
@@ -84,23 +84,7 @@ public class TextObjectSpriteDrawer implements TextureDrawer {
         Color textColor = ColorFactory.createColor(colorMap, textObject.getFont().getColor());
         Font font = computeFont(textObject);
 
-        loop: {
-            for (String[] textLine : stringArray) {
-                for (String text : textLine) {
-                    if (text != null) {
-                        if (!latexSet && isLatex(text)) {
-                            latexSet = true;
-                            LoadClassPath.loadOnUse("graphics_latex_textrendering");
-                        } else if (!mathmlSet && isMathML(text)) {
-                            LoadClassPath.loadOnUse("graphics_mathml_textrendering");
-                        } else if (latexSet && mathmlSet) {
-                            break loop;
-                        }
-                    }
-                }
-            }
-        }
-
+        loadDeps(stringArray);
         fillEntityMatrix(stringArray, fractionalFont, textColor, font);
 
         this.width  = sum(columnWidth) + HMARGIN * (columnNumber + 1) + 2 * thickness + SPACEWIDTH * (columnNumber - 1);
@@ -132,6 +116,7 @@ public class TextObjectSpriteDrawer implements TextureDrawer {
         Font font = computeFont(textObject, scaleFactor);
 
         /* Fill the entity matrix */
+        loadDeps(stringArray);
         fillEntityMatrix(stringArray, fractionalFont, textColor, font);
 
         this.width  = (int)((double)sum(columnWidth) + scaleFactor * (double)(HMARGIN * (columnNumber + 1)) + 2 * thickness + scaleFactor * (double)(SPACEWIDTH * (columnNumber - 1)));
@@ -139,6 +124,29 @@ public class TextObjectSpriteDrawer implements TextureDrawer {
     }
 
     /**
+     * Load JLaTeXMath or JEuclid if mandatory
+     * @param stringArray the text to check
+     */
+    protected void loadDeps(String[][] stringArray) {
+    loop: {
+            for (String[] textLine : stringArray) {
+                for (String text : textLine) {
+                    if (text != null) {
+                        if (!latexSet && isLatex(text)) {
+                            latexSet = true;
+                            LoadClassPath.loadOnUse("graphics_latex_textrendering");
+                        } else if (!mathmlSet && isMathML(text)) {
+                            LoadClassPath.loadOnUse("graphics_mathml_textrendering");
+                        } else if (latexSet && mathmlSet) {
+                            break loop;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
      * Fills the entity matrix
      * @param stringArray the matrix of text strings used to fill the entity matrix.
      * @param fractionalFont specifies whether a fractional font is used or not.
@@ -370,14 +378,14 @@ public class TextObjectSpriteDrawer implements TextureDrawer {
      */
     protected float computeAlignmentFactor(Text text) {
         switch (text.getAlignmentAsEnum()) {
-            case LEFT:
-                return 0f;
-            case CENTER:
-                return 1f / 2f;
-            case RIGHT:
-                return 1f;
-            default:
-                return 0f;
+        case LEFT:
+            return 0f;
+        case CENTER:
+            return 1f / 2f;
+        case RIGHT:
+            return 1f;
+        default:
+            return 0f;
         }
     }