goo/GooString.cc |   61 +++++++++++++++++++++++++++++++++++++++++++++----------
 goo/GooString.h  |   17 ++++++++-------
 poppler/Annot.cc |    3 --
 3 files changed, 61 insertions(+), 20 deletions(-)

New commits:
commit 67f3c3e0d03ec63df7c6028cbd626e384d231c2b
Author: Fabio D'Urso <[email protected]>
Date:   Wed May 9 16:48:15 2012 +0200

    GooString formatting: add support for uppercase hexadecimal + Use it in 
Annot::layoutText

diff --git a/goo/GooString.cc b/goo/GooString.cc
index fc78d90..1ebf341 100644
--- a/goo/GooString.cc
+++ b/goo/GooString.cc
@@ -20,6 +20,7 @@
 // Copyright (C) 2007 Jeff Muizelaar <[email protected]>
 // Copyright (C) 2008-2011 Albert Astals Cid <[email protected]>
 // Copyright (C) 2011 Kenji Uno <[email protected]>
+// Copyright (C) 2012 Fabio D'Urso <[email protected]>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -65,29 +66,35 @@ union GooStringFormatArg {
 enum GooStringFormatType {
   fmtIntDecimal,
   fmtIntHex,
+  fmtIntHexUpper,
   fmtIntOctal,
   fmtIntBinary,
   fmtUIntDecimal,
   fmtUIntHex,
+  fmtUIntHexUpper,
   fmtUIntOctal,
   fmtUIntBinary,
   fmtLongDecimal,
   fmtLongHex,
+  fmtLongHexUpper,
   fmtLongOctal,
   fmtLongBinary,
   fmtULongDecimal,
   fmtULongHex,
+  fmtULongHexUpper,
   fmtULongOctal,
   fmtULongBinary,
 #ifdef LLONG_MAX
   fmtLongLongDecimal,
   fmtLongLongHex,
+  fmtLongLongHexUpper,
   fmtLongLongOctal,
   fmtLongLongBinary,
 #endif
 #ifdef ULLONG_MAX
   fmtULongLongDecimal,
   fmtULongLongHex,
+  fmtULongLongHexUpper,
   fmtULongLongOctal,
   fmtULongLongBinary,
 #endif
@@ -101,13 +108,13 @@ enum GooStringFormatType {
 };
 
 static const char *formatStrings[] = {
-  "d", "x", "o", "b", "ud", "ux", "uo", "ub",
-  "ld", "lx", "lo", "lb", "uld", "ulx", "ulo", "ulb",
+  "d", "x", "X", "o", "b", "ud", "ux", "uX", "uo", "ub",
+  "ld", "lx", "lX", "lo", "lb", "uld", "ulx", "ulX", "ulo", "ulb",
 #ifdef LLONG_MAX
-  "lld", "llx", "llo", "llb",
+  "lld", "llx", "llX", "llo", "llb",
 #endif
 #ifdef ULLONG_MAX
-  "ulld", "ullx", "ullo", "ullb",
+  "ulld", "ullx", "ullX", "ullo", "ullb",
 #endif
   "f", "gs", "g",
   "c",
@@ -388,6 +395,7 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
          switch (ft) {
          case fmtIntDecimal:
          case fmtIntHex:
+         case fmtIntHexUpper:
          case fmtIntOctal:
          case fmtIntBinary:
          case fmtSpace:
@@ -395,18 +403,21 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
            break;
          case fmtUIntDecimal:
          case fmtUIntHex:
+         case fmtUIntHexUpper:
          case fmtUIntOctal:
          case fmtUIntBinary:
            args[argsLen].ui = va_arg(argList, Guint);
            break;
          case fmtLongDecimal:
          case fmtLongHex:
+         case fmtLongHexUpper:
          case fmtLongOctal:
          case fmtLongBinary:
            args[argsLen].l = va_arg(argList, long);
            break;
          case fmtULongDecimal:
          case fmtULongHex:
+         case fmtULongHexUpper:
          case fmtULongOctal:
          case fmtULongBinary:
            args[argsLen].ul = va_arg(argList, Gulong);
@@ -414,6 +425,7 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
 #ifdef LLONG_MAX
          case fmtLongLongDecimal:
          case fmtLongLongHex:
+         case fmtLongLongHexUpper:
          case fmtLongLongOctal:
          case fmtLongLongBinary:
            args[argsLen].ll = va_arg(argList, long long);
@@ -422,6 +434,7 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
 #ifdef ULLONG_MAX
          case fmtULongLongDecimal:
          case fmtULongLongHex:
+         case fmtULongLongHexUpper:
          case fmtULongLongOctal:
          case fmtULongLongBinary:
            args[argsLen].ull = va_arg(argList, unsigned long long);
@@ -454,6 +467,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
        case fmtIntHex:
          formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 16, &str, &len);
          break;
+       case fmtIntHexUpper:
+         formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 16, &str, &len,
+                   gTrue);
+         break;
        case fmtIntOctal:
          formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
          break;
@@ -468,6 +485,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
          formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 16,
                     &str, &len);
          break;
+       case fmtUIntHexUpper:
+         formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 16,
+                    &str, &len, gTrue);
+         break;
        case fmtUIntOctal:
          formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
          break;
@@ -480,6 +501,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
        case fmtLongHex:
          formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 16, &str, &len);
          break;
+       case fmtLongHexUpper:
+         formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 16, &str, &len,
+                   gTrue);
+         break;
        case fmtLongOctal:
          formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
          break;
@@ -494,6 +519,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
          formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 16,
                     &str, &len);
          break;
+       case fmtULongHexUpper:
+         formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 16,
+                    &str, &len, gTrue);
+         break;
        case fmtULongOctal:
          formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
          break;
@@ -507,6 +536,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
        case fmtLongLongHex:
          formatInt(arg.ll, buf, sizeof(buf), zeroFill, width, 16, &str, &len);
          break;
+       case fmtLongLongHexUpper:
+         formatInt(arg.ll, buf, sizeof(buf), zeroFill, width, 16, &str, &len,
+                   gTrue);
+         break;
        case fmtLongLongOctal:
          formatInt(arg.ll, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
          break;
@@ -523,6 +556,10 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
          formatUInt(arg.ull, buf, sizeof(buf), zeroFill, width, 16,
                     &str, &len);
          break;
+       case fmtULongLongHexUpper:
+         formatUInt(arg.ull, buf, sizeof(buf), zeroFill, width, 16,
+                    &str, &len, gTrue);
+         break;
        case fmtULongLongOctal:
          formatUInt(arg.ull, buf, sizeof(buf), zeroFill, width, 8,
                     &str, &len);
@@ -595,16 +632,20 @@ GooString *GooString::appendfv(const char *fmt, va_list 
argList) {
   gfree(args);
   return this;
 }
+
+static const char lowerCaseDigits[17] = "0123456789abcdef";
+static const char upperCaseDigits[17] = "0123456789ABCDEF";
+
 #ifdef LLONG_MAX
 void GooString::formatInt(long long x, char *buf, int bufSize,
                           GBool zeroFill, int width, int base,
-                          char **p, int *len) {
+                          char **p, int *len, GBool upperCase) {
 #else
 void GooString::formatInt(long x, char *buf, int bufSize,
                           GBool zeroFill, int width, int base,
-                          char **p, int *len) {
+                          char **p, int *len, GBool upperCase) {
 #endif
-  static char vals[17] = "0123456789abcdef";
+  const char *vals = upperCase ? upperCaseDigits : lowerCaseDigits;
   GBool neg;
   int start, i, j;
 
@@ -636,13 +677,13 @@ void GooString::formatInt(long x, char *buf, int bufSize,
 #ifdef ULLONG_MAX
 void GooString::formatUInt(unsigned long long x, char *buf, int bufSize,
                            GBool zeroFill, int width, int base,
-                           char **p, int *len) {
+                           char **p, int *len, GBool upperCase) {
 #else
 void GooString::formatUInt(Gulong x, char *buf, int bufSize,
                            GBool zeroFill, int width, int base,
-                           char **p, int *len) {
+                           char **p, int *len, GBool upperCase) {
 #endif
-  static char vals[17] = "0123456789abcdef";
+  const char *vals = upperCase ? upperCaseDigits : lowerCaseDigits;
   int i, j;
 
   i = bufSize;
diff --git a/goo/GooString.h b/goo/GooString.h
index 23558b0..b24051b 100644
--- a/goo/GooString.h
+++ b/goo/GooString.h
@@ -18,6 +18,7 @@
 // Copyright (C) 2006 Kristian Høgsberg <[email protected]>
 // Copyright (C) 2006 Krzysztof Kowalczyk <[email protected]>
 // Copyright (C) 2008-2010, 2012 Albert Astals Cid <[email protected]>
+// Copyright (C) 2012 Fabio D'Urso <[email protected]>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -80,10 +81,10 @@ public:
   // - <precision> is the number of digits to the right of the decimal
   //   point (for floating point numbers)
   // - <type> is one of:
-  //     d, x, o, b -- int in decimal, hex, octal, binary
-  //     ud, ux, uo, ub -- unsigned int
-  //     ld, lx, lo, lb, uld, ulx, ulo, ulb -- long, unsigned long
-  //     lld, llx, llo, llb, ulld, ullx, ullo, ullb
+  //     d, x, X, o, b -- int in decimal, lowercase hex, uppercase hex, octal, 
binary
+  //     ud, ux, uX, uo, ub -- unsigned int
+  //     ld, lx, lX, lo, lb, uld, ulx, ulX, ulo, ulb -- long, unsigned long
+  //     lld, llx, llX, llo, llb, ulld, ullx, ullX, ullo, ullb
   //         -- long long, unsigned long long
   //     f, g -- double
   //     c -- char
@@ -170,20 +171,20 @@ private:
 #ifdef LLONG_MAX
   static void formatInt(long long x, char *buf, int bufSize,
                        GBool zeroFill, int width, int base,
-                       char **p, int *len);
+                       char **p, int *len, GBool upperCase = gFalse);
 #else
   static void formatInt(long x, char *buf, int bufSize,
                        GBool zeroFill, int width, int base,
-                       char **p, int *len);
+                       char **p, int *len, GBool upperCase = gFalse);
 #endif
 #ifdef ULLONG_MAX
   static void formatUInt(unsigned long long x, char *buf, int bufSize,
                         GBool zeroFill, int width, int base,
-                        char **p, int *len);
+                        char **p, int *len, GBool upperCase = gFalse);
 #else
   static void formatUInt(Gulong x, char *buf, int bufSize,
                         GBool zeroFill, int width, int base,
-                        char **p, int *len);
+                        char **p, int *len, GBool upperCase = gFalse);
 #endif
   static void formatDouble(double x, char *buf, int bufSize, int prec,
                           GBool trim, char **p, int *len);
diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 95cee91..8e1e760 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -3891,7 +3891,7 @@ void Annot::layoutText(GooString *text, GooString 
*outBuf, int *i,
         }
       } else {
         ccToUnicode->decRefCnt();
-        error(errSyntaxError, -1, "AnnotWidget::layoutText, cannot convert 
U+{0:04ux}", uChar);
+        error(errSyntaxError, -1, "AnnotWidget::layoutText, cannot convert 
U+{0:04uX}", uChar);
       }
     }
 
commit 1f7f8a78409e6bcc90bd32ea2aaa75ed3a7b6218
Author: Fabio D'Urso <[email protected]>
Date:   Wed May 9 16:18:05 2012 +0200

    Use error() instead of fprintf(stderr, ...) in Annot::layoutText

diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 24ef57d..95cee91 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -3891,8 +3891,7 @@ void Annot::layoutText(GooString *text, GooString 
*outBuf, int *i,
         }
       } else {
         ccToUnicode->decRefCnt();
-        fprintf(stderr,
-                "warning: layoutText: cannot convert U+%04X\n", uChar);
+        error(errSyntaxError, -1, "AnnotWidget::layoutText, cannot convert 
U+{0:04ux}", uChar);
       }
     }
 
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to