Samuel GOUGEON [Thu, 11 Aug 2016 03:51:56 +0000 (05:51 +0200)]
Change-Id: I97abee67ecd83a98b1c1850ae42aa6880054f9ba

index 54f8e7c..0138e1d 100644 (file)
@@ -1,5 +1,5 @@
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
//
// 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)
-    N=string(r.num)
-    D=string(r.den)
-    ln=max(matrix(length(N),2,-1),"r")
-    ld=max(matrix(length(D),2,-1),"r")
-    l=max(ln,ld)
-    [m,n]=size(r.num);
-    S=emptystr(m,n)
-    for i=1:m*n
-        s=2*i-1:2*i
-        N(s)=part(" ",1:(l(i)-ln(i))/2)+N(s)
-        D(s)=part(" ",1:(l(i)-ld(i))/2)+D(s)
-        S(i) =part("-",ones(1,l(i)))
-    end
-    txt=emptystr(5*m,n);
-    txt(1:5:\$,:)=N(1:2:\$,:)
-    txt(2:5:\$,:)=N(2:2:\$,:)
-    txt(3:5:\$,:)=S(1:\$,:)
-    txt(4:5:\$,:)=D(1:2:\$,:)
-    txt(5:5:\$,:)=D(2:2:\$,:)
+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
+    lengthI = max([length(N(i)) length(D(i))],"c")
+    hruleMax = part("-",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")