print corrected for string function. 91/15191/2
Cedric Delamarre [Tue, 9 Sep 2014 15:18:59 +0000 (17:18 +0200)]
string(-1)
str=string([0 1])
str=="0"
str=="1"

rl = rlist(%s,2);
tt=[rl rl rl] * %s

Change-Id: Idc32a41e8d4914e5a4f7796f52c53db1e4d8246f

scilab/modules/ast/includes/types/tostring_common.hxx
scilab/modules/ast/src/cpp/types/singlepoly.cpp
scilab/modules/ast/src/cpp/types/tostring_common.cpp
scilab/modules/string/sci_gateway/cpp/sci_string.cpp

index 410f8b9..09fac76 100644 (file)
 #define SIZE_BOOL                       1
 #define SIZE_BETWEEN_BOOL               1
 #define SPACE_BETWEEN_BOOL              L" "
-#define SIGN_LENGTH                     2
-#define NO_SIGN                         L"  "
-#define MINUS_STRING                    L" -"
-#define PLUS_STRING                     L" +"
+#define SIGN_LENGTH                     1
+#define NO_SIGN                         L" "
+#define MINUS_STRING                    L"-"
+#define PLUS_STRING                     L"+"
 #define SYMBOL_I                        L"i"
 
 
@@ -37,7 +37,7 @@
 
 typedef struct __DOUBLE_FORMAT__
 {
-    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true), bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(2) {}
+    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true), bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(SIGN_LENGTH), bPrintBlank(true) {}
     int iWidth;
     int iPrec;
     bool bExp;
@@ -46,6 +46,7 @@ typedef struct __DOUBLE_FORMAT__
     bool bPrintOne;
     bool bPaddSign;
     int iSignLen;
+    bool bPrintBlank;
 } DoubleFormat;
 
 /*double*/
index b9abdc3..b268bd7 100644 (file)
@@ -414,7 +414,8 @@ void SinglePoly::toStringInternal(double *_pdblVal, wstring _szVar, list<wstring
 
         if (ostemp2.str() == L" ")
         {
-            addSpaces(&ostemp2, static_cast<int>(ostemp.str().size()));
+            // -1 because ostemp2 have already a space
+            addSpaces(&ostemp2, static_cast<int>(ostemp.str().size()) - 1);
         }
 
         _pListExp->push_back(ostemp2.str());
index 8a6101c..d1d9add 100644 (file)
@@ -82,6 +82,8 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
     double dblAbs = fabs(_dblVal);
     int iNbDigit = 0;
     int iNbDec = 0;
+    int iBlankSize = _pDF->bPrintBlank ? BLANK_SIZE : 0;
+    _pDF->iSignLen = _pDF->bPrintBlank ? _pDF->iSignLen + 1 : _pDF->iSignLen;
 
     _pDF->bExp |= ConfigVariable::getFormatMode() == 0;
     int iTotalLen = 0;
@@ -106,14 +108,14 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
         {
             //exponant
             _pDF->bExp = true;
-            iTotalLen = BLANK_SIZE + 1 /*integer before dot */  + POINT_SIZE + EXPOSANT_SIZE + (int)log10((double)iNbDigit) + 1;
+            iTotalLen = iBlankSize + 1 /*integer before dot */  + POINT_SIZE + EXPOSANT_SIZE + (int)log10((double)iNbDigit) + 1;
             _pDF->iWidth = iPrecNeeded;
             _pDF->iPrec = iPrecNeeded - iTotalLen;
             return;
         }
         else
         {
-            iTotalLen = BLANK_SIZE + 1 /*integer before dot */  + POINT_SIZE;
+            iTotalLen = iBlankSize + 1 /*integer before dot */  + POINT_SIZE;
         }
     }
     else
@@ -128,7 +130,7 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
                 dblTemp = 1;    //no incidence on value, just to allow log10(dblTemp)
             }
             _pDF->bExp = true;
-            iTotalLen = BLANK_SIZE + 1 /*integer before dot */  + POINT_SIZE + EXPOSANT_SIZE + (int)log10(dblTemp) + 1;
+            iTotalLen = iBlankSize + 1 /*integer before dot */  + POINT_SIZE + EXPOSANT_SIZE + (int)log10(dblTemp) + 1;
             _pDF->iWidth = iPrecNeeded;
             _pDF->iPrec = iPrecNeeded - iTotalLen;
             return;
@@ -136,7 +138,7 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
         else
         {
             //number of digit in integer part
-            iTotalLen = BLANK_SIZE + ((int)dblTemp + 1) + POINT_SIZE;
+            iTotalLen = iBlankSize + ((int)dblTemp + 1) + POINT_SIZE;
         }
     }
 
@@ -219,34 +221,43 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
         return;
     }
 
-    if (_pDF->bPrintPlusSign)
+    const wchar_t* pBlank = L"";
+    if (_pDF->bPrintBlank)
     {
-        os_swprintf(pwstSign, 32, L"%-*ls", _pDF->iSignLen, _dblVal < 0 ? MINUS_STRING : PLUS_STRING);
+        pBlank = L" ";
     }
-    else
+
+    const wchar_t* pSign = MINUS_STRING;
+    if (_dblVal >= 0)
     {
-        if (_pDF->bPaddSign)
+        if (_pDF->bPrintPlusSign)
         {
-            os_swprintf(pwstSign, 32, L"%-*ls", _pDF->iSignLen, _dblVal < 0 ? MINUS_STRING : NO_SIGN);
+            pSign = PLUS_STRING;
+        }
+        else if (_pDF->bPaddSign)
+        {
+            pSign = NO_SIGN;
         }
         else
         {
-            os_swprintf(pwstSign, 32, L"%-*ls", _pDF->iSignLen, _dblVal < 0 ? MINUS_STRING : L"");
+            pSign = L"";
         }
     }
 
+    os_swprintf(pwstSign, 32, L"%ls%ls%ls", pBlank, pSign, pBlank);
+
     if ((_pDF->bPrintOne == true) || (isEqual(fabs(_dblVal), 1)) == false)
     {
         //do not print if _bPrintOne == false && _dblVal == 1
         if (ISNAN(_dblVal))
         {
             //NaN
-            os_swprintf(pwstOutput, 32, L"%ls %*ls", pwstSign, _pDF->iPrec, L"Nan");
+            os_swprintf(pwstOutput, 32, L"%ls%*ls", pwstSign, _pDF->iPrec, L"Nan");
         }
         else if (!finite(_dblVal))
         {
             //Inf
-            os_swprintf(pwstOutput, 32, L"%ls %*ls", pwstSign, _pDF->iPrec, L"Inf");
+            os_swprintf(pwstOutput, 32, L"%ls%*ls", pwstSign, _pDF->iPrec, L"Inf");
         }
         else if (_pDF->bExp)
         {
@@ -269,11 +280,11 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
 
             if (_pDF->bPrintPoint)
             {
-                os_swprintf(pwstFormat, 32, L"%ls %%#.0f%%0%d.0fD%%+d", pwstSign, _pDF->iPrec);
+                os_swprintf(pwstFormat, 32, L"%ls%%#.0f%%0%d.0fD%%+d", pwstSign, _pDF->iPrec);
             }
             else
             {
-                os_swprintf(pwstFormat, 32, L"%ls %%.0f%%0%d.0fD%%+d", pwstSign, _pDF->iPrec);
+                os_swprintf(pwstFormat, 32, L"%ls%%.0f%%0%d.0fD%%+d", pwstSign, _pDF->iPrec);
             }
 
             os_swprintf(pwstOutput, 32, pwstFormat, dblEnt, dblDec, (int)dblTemp);
@@ -282,11 +293,11 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
         {
             if (_pDF->bPrintPoint)
             {
-                os_swprintf(pwstFormat, 32, L"%ls %%#-%d.%df", pwstSign, _pDF->iWidth - 1, _pDF->iPrec);
+                os_swprintf(pwstFormat, 32, L"%ls%%#-%d.%df", pwstSign, _pDF->iWidth - 1, _pDF->iPrec);
             }
             else
             {
-                os_swprintf(pwstFormat, 32, L"%ls %%-%d.%df", pwstSign, _pDF->iWidth - 2, _pDF->iPrec);  //-2 no point needed
+                os_swprintf(pwstFormat, 32, L"%ls%%-%d.%df", pwstSign, _pDF->iWidth - 2, _pDF->iPrec);  //-2 no point needed
             }
 
             os_swprintf(pwstOutput, 32, pwstFormat, fabs(_dblVal));
@@ -296,7 +307,7 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
     }
     else if (wcslen(pwstSign) != 0)
     {
-        os_swprintf(pwstOutput, 32, L"%ls ", pwstSign);
+        os_swprintf(pwstOutput, 32, L"%ls", pwstSign);
         *_postr << pwstOutput;
     }
 }
index 73b6321..9bc6e99 100644 (file)
@@ -130,16 +130,17 @@ static void DoubleComplexMatrix2String(std::wostringstream *_postr,  double _dbl
     if(!R aa C -> Ci
     */
     DoubleFormat dfR, dfI;
+    dfR.bPrintBlank = false;
+    dfI.bPrintBlank = false;
+
     getDoubleFormat(_dblR, &dfR);
     getDoubleFormat(_dblI, &dfI);
 
     dfR.bPrintPoint = dfR.bExp;
     dfR.bPaddSign = false;
-    dfR.iSignLen = 0;
 
     dfI.bPrintPoint = dfI.bExp;
     dfI.bPaddSign = false;
-    dfI.iSignLen = 0;
 
 
     if (_dblR == 0)