849e41c2ae08874da0f8b19dc6c93e01fd0db49c
[scilab.git] / scilab / modules / string / macros / asciimat.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) ???? - INRIA - Scilab
3 // Copyright (C) 2012 - SCilab Enterprises - Cedric Delamarre
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13
14 function y=asciimat(x)
15     // This function converts a matrix of string into a matrix of ascii codes using ascii() Scilab function
16     // and converts an array of ascii codes into a array of string
17     // Returned value have same size as input value instead of second dims !
18     // Fonction created because ascii() Scilab function returns a row vector
19
20     if x==[] then
21         y=[]
22         return
23     end
24
25     dims = size(x);
26     if typeof(x) == "string" // convert string to ascii code
27         if size(dims,"*") > 2 // hypermatrix case
28             colref = 0;
29             lastDim = dims($);
30             dims($) = [];
31             l=list();
32             for i=1:size(dims,"*")
33                 l(i) = 1:$;
34             end
35             for i=1:lastDim
36                 res=asciimat(x(l(:), i));
37                 if colref == 0 then
38                     colref=size(res,"c");
39                 else
40                     if colref <> size(res,"c")
41                         error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
42                         return
43                     end
44                 end
45                 y(l(:), i) = res;
46             end
47         else // 2D matrix case | ["a" "bc";"de" "f"] => [97 98 99;100 101 102]
48             x=x';
49             a = ascii(x(:));
50             aSize = size(a, "*");
51             dims(2) = 1;
52             p = prod(dims);
53             if modulo(aSize, p)
54                 error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
55             end
56             dims(2) = dims(1);
57             dims(1) = aSize/p;
58             y = matrix(a, dims)';
59         end
60     else    // convert asciicode to string
61         if size(dims,"*") > 2 // hypermatrix case
62             lastDim = dims($);
63             dims($) = [];
64             l=list();
65             for i=1:size(dims,"*")
66                 l(i) = 1:$;
67             end
68             for i=1:lastDim
69                 y(l(1:$-1), i) = asciimat(x(l(:), i))
70             end
71         else // 2D matrix case | [97 98 99;100 101 102] => ["abc";"def"]
72             y = ascii(x');
73             // a is a scalar string
74             if modulo(length(y), dims(2))
75                 error(msprintf(gettext("%s: Wrong input argument #%d: Inconsistent size.\n"),"asciimat", 1));
76             end
77             if dims(1) <> 1 && dims(2) <> 1 then
78                 y=strsplit(y, cumsum(dims(2) * ones(1,dims(1)-1)));
79             end
80         end
81     end
82 endfunction