eliot-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Eliot-dev] eliot dic/encoding.cpp dic/encoding.h test/dupl...


From: Olivier Teulière
Subject: [Eliot-dev] eliot dic/encoding.cpp dic/encoding.h test/dupl...
Date: Tue, 23 Jun 2009 21:36:34 +0000

CVSROOT:        /cvsroot/eliot
Module name:    eliot
Changes by:     Olivier Teulière <ipkiss>       09/06/23 21:36:33

Modified files:
        dic            : encoding.cpp encoding.h 
        test           : duplicate_1_player.ref duplicate_2_ai.ref 
                         duplicate_explosive_variant.ref 
                         duplicate_humans_ai.ref 
                         duplicate_joker_variant.ref 
                         duplicate_navigation.ref duplicate_no_point.ref 
                         freegame_3_ai.ref 
                         freegame_explosive_variant.ref 
                         freegame_joker_variant.ref 
                         freegame_navigation.ref freegame_play.ref 
                         load_game.ref load_saved_game.ref 
                         training_cross.ref training_cross2.ref 
                         training_explosive_variant.ref 
                         training_joker.ref training_joker2.ref 
                         training_joker_variant.ref 
                         training_navigation.ref training_play.ref 
                         training_rosace.ref 
        utils          : game_io.cpp 

Log message:
        Center correctly multi-chars letters in the text interface

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/encoding.cpp?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/encoding.h?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_1_player.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_2_ai.ref?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_explosive_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_humans_ai.ref?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_joker_variant.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_navigation.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_no_point.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_3_ai.ref?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_explosive_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_joker_variant.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_navigation.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_play.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/load_game.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/load_saved_game.ref?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_cross.ref?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_cross2.ref?cvsroot=eliot&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_explosive_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker2.ref?cvsroot=eliot&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker_variant.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_navigation.ref?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_play.ref?cvsroot=eliot&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_rosace.ref?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/game_io.cpp?cvsroot=eliot&r1=1.18&r2=1.19

Patches:
Index: dic/encoding.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/encoding.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- dic/encoding.cpp    28 Feb 2009 09:23:07 -0000      1.7
+++ dic/encoding.cpp    23 Jun 2009 21:36:33 -0000      1.8
@@ -279,6 +279,40 @@
 }
 
 
+string centerAndConvert(const wstring &iWstr, unsigned int iLength, char c)
+{
+    int width = 0;
+    for (unsigned int i = 0; i < iWstr.size(); ++i)
+    {
+        int n = wcwidth(iWstr[i]);
+        if (n == -1)
+        {
+            ostringstream ss;
+            ss << "padAndConvert: non printable character: " << iWstr[i];
+            // XXX: Should we throw an exception instead? Just ignore the 
problem?
+            cerr << ss.str() << endl;;
+            //throw DicException(ss.str());
+            return convertToMb(iWstr);
+        }
+        width += n;
+    }
+
+    if ((unsigned int)width >= iLength)
+        return convertToMb(iWstr);
+    else
+    {
+        // Padding is needed
+        string s((iLength - width) / 2, c);
+        string res = s + convertToMb(iWstr) + s;
+        // If the string cannot be centered perfectly, pad again on the right
+        // (arbitrary; if needed, we could take the iLeftPad argument)
+        if (res.size() != iLength)
+            s.append(1, c);
+        return res;
+    }
+}
+
+
 unsigned int readFromUTF8(wchar_t *oString, unsigned int iWideSize,
                           const char *iBuffer, unsigned int iBufSize,
                           const string &iContext)

Index: dic/encoding.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/encoding.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- dic/encoding.h      22 Nov 2008 13:09:28 -0000      1.3
+++ dic/encoding.h      23 Jun 2009 21:36:33 -0000      1.4
@@ -75,6 +75,15 @@
                      bool iLeftPad = true, char c = ' ');
 
 /**
+ * Convert the given string into a multi-byte one. If the number of columns
+ * needed to display the resulting string is less than iLength, pad it with
+ * the given character (defaulting to space) on both left and right, trying
+ * to keep the string centered
+ */
+string centerAndConvert(const wstring &iWstr, unsigned int iLength,
+                        char c = ' ');
+
+/**
  * Utility function to convert a char* buffer encoded in UTF-8 into a
  * wchar_t* string
  * @param oString: where to write the converted string

Index: test/duplicate_1_player.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_1_player.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/duplicate_2_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_2_ai.ref,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8

Index: test/duplicate_explosive_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_explosive_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3

Index: test/duplicate_humans_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_humans_ai.ref,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7

Index: test/duplicate_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_joker_variant.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/duplicate_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_navigation.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/duplicate_no_point.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_no_point.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/freegame_3_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_3_ai.ref,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7

Index: test/freegame_explosive_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_explosive_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3

Index: test/freegame_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_joker_variant.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/freegame_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_navigation.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/freegame_play.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_play.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3

Index: test/load_game.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/load_game.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4

Index: test/load_saved_game.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/load_saved_game.ref,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7

Index: test/training_cross.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_cross.ref,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7

Index: test/training_cross2.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_cross2.ref,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9

Index: test/training_explosive_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_explosive_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3

Index: test/training_joker.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3

Index: test/training_joker2.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker2.ref,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9

Index: test/training_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker_variant.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/training_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_navigation.ref,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2

Index: test/training_play.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_play.ref,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11

Index: test/training_rosace.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_rosace.ref,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8

Index: utils/game_io.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/game_io.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- utils/game_io.cpp   23 Jun 2009 13:21:20 -0000      1.18
+++ utils/game_io.cpp   23 Jun 2009 21:36:33 -0000      1.19
@@ -51,9 +51,9 @@
         for (col = BOARD_MIN; col <= BOARD_MAX; col++)
         {
             if (iGame.getBoard().isVacant(row, col))
-                out << "  -";
+                out << " - ";
             else
-                out << padAndConvert(iGame.getBoard().getDisplayStr(row, col), 
3);
+                out << centerAndConvert(iGame.getBoard().getDisplayStr(row, 
col), 3);
         }
         out << endl;
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]