[ast] improve display of (complex) polymomials and rationals
[scilab.git] / scilab / modules / overloading / macros / %r_string.sci
index 0138e1d..11635da 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2016 - Samuel GOUGEON
+// Copyright (C) 2019 - St├ęphane MOTTELET
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
+
 function txt = %r_string(r)
     // string output of any array of rationals, of any number of dimensions (even>2)
     //
     N = string(r.num(:))
     D = string(r.den(:))
     nr = size(r,"*")
-    i = 1:2:2*nr
+    i = 1:nr
     lengthI = max([length(N(i)) length(D(i))],"c")
-    hruleMax = part("-",ones(1:max(lengthI)))
+    hruleMax = part(ascii([226 148 128]),ones(1:max(lengthI)))
     hrules = strncpy(emptystr(nr,1)+hruleMax,lengthI)
-    txt = emptystr(nr*5,1);
-    j = 1:5:5*nr
-    txt(j)   = N(i)    // Exponents of numerator
-    txt(j+1) = N(i+1)  // Coefficients of numerator
-    txt(j+2) = hrules  // -------------------------
-    txt(j+3) = D(i)    // Exponents of denominator
-    txt(j+4) = D(i+1)  // Coefficients of denominator
-
-    // Centering the shortest part num or den on the other:
-    // justify(,"c") can't be used on exponents rows due to their leading blanks
-    txt = matrix(txt,5,-1)
-    [lmin, irmin] = min(length(txt),"r")
-    [lmax, irmax] = max(length(txt),"r")
-    leftpaddlength = floor((lmax-lmin)/2)
-    hpaddMax = part(" ", ones(1:max(leftpaddlength)))
-    padding = strncpy(emptystr(1,nr)+hpaddMax, leftpaddlength)
-    k = irmin<3  //  columns are %T where the num is the shortest
-    txt(1,k)  = padding(k)  + txt(1,k)
-    txt(2,k)  = padding(k)  + txt(2,k)
-    txt(4,~k) = padding(~k) + txt(4,~k)
-    txt(5,~k) = padding(~k) + txt(5,~k)
+    txt = emptystr(nr*3,1);
+    j = 1:3:3*nr
+    txt(j)   = N(i)    // numerator
+    txt(j+1) = hrules  // ----------
+    txt(j+2) = D(i)    // denominator
 
-    // We reshape the result
+    // We reshape and justify the result
     s = size(r)
     s(1) = -1
-    txt = matrix(txt,s)
+    txt = justify(matrix(txt,s),"c")
 endfunction