* Bugs #14976 fixed: asciimat(colNum) and asciimat(asciimat("àeï")) failed
[scilab.git] / scilab / modules / string / macros / asciimat.sci
index 849e41c..3ac4b9a 100644 (file)
@@ -1,6 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) ???? - INRIA - Scilab
-// Copyright (C) 2012 - SCilab Enterprises - Cedric Delamarre
+// Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
+// Copyright (C) 2017 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -11,8 +12,9 @@
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function y=asciimat(x)
-    // This function converts a matrix of string into a matrix of ascii codes using ascii() Scilab function
+function y = asciimat(x)
+    // This function converts a matrix of strings into a matrix of ascii codes
+    // using ascii() Scilab function,
     // and converts an array of ascii codes into a array of string
     // Returned value have same size as input value instead of second dims !
     // Fonction created because ascii() Scilab function returns a row vector
@@ -38,7 +40,8 @@ function y=asciimat(x)
                     colref=size(res,"c");
                 else
                     if colref <> size(res,"c")
-                        error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
+                        msg = gettext("%s: Wrong input argument #%d: Inconsistent size.\n")
+                        error(msprintf(msg, "asciimat", 1));
                         return
                     end
                 end
@@ -51,32 +54,25 @@ function y=asciimat(x)
             dims(2) = 1;
             p = prod(dims);
             if modulo(aSize, p)
-                error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
+                msg = gettext("%s: Wrong input argument #%d: Inconsistent size.\n")
+                error(msprintf(msg, "asciimat", 1));
             end
             dims(2) = dims(1);
             dims(1) = aSize/p;
             y = matrix(a, dims)';
         end
-    else    // convert asciicode to string
-        if size(dims,"*") > 2 // hypermatrix case
-            lastDim = dims($);
-            dims($) = [];
-            l=list();
-            for i=1:size(dims,"*")
-                l(i) = 1:$;
-            end
-            for i=1:lastDim
-                y(l(1:$-1), i) = asciimat(x(l(:), i))
-            end
-        else // 2D matrix case | [97 98 99;100 101 102] => ["abc";"def"]
-            y = ascii(x');
-            // a is a scalar string
-            if modulo(length(y), dims(2))
-                error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
-            end
-            if dims(1) <> 1 && dims(2) <> 1 then
-                y=strsplit(y, cumsum(dims(2) * ones(1,dims(1)-1)));
+    else  // convert ascii codes to string
+        x = permute(x,[2 1 3:ndims(x)]);
+        y = ascii(x);
+        Ly = length(y)
+        rlength = Ly / (prod(dims)/dims(2))
+        if dims(1)>1
+            if modulo(Ly, rlength)
+                msg = gettext("%s: Wrong input argument #%d: Inconsistent size.\n")
+                error(msprintf(msg,"asciimat", 1))
             end
+            y = strsplit(y, rlength:rlength:(Ly-1));
         end
+        y = matrix(y, [dims(1) dims(3:$)]);
     end
 endfunction