[poppler] 4 commits - goo/GooString.cc goo/GooString.h poppler/CMap.cc poppler/Function.cc poppler/Object.h poppler/StructElement.cc qt4/tests qt5/tests utils/pdftocairo.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Sat Dec 28 14:04:07 PST 2013
goo/GooString.cc | 19 ++++++++----
goo/GooString.h | 10 ++++--
poppler/CMap.cc | 3 +
poppler/Function.cc | 3 +
poppler/Object.h | 4 +-
poppler/StructElement.cc | 2 -
qt4/tests/check_goostring.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++
qt5/tests/check_goostring.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++
utils/pdftocairo.cc | 2 -
9 files changed, 160 insertions(+), 15 deletions(-)
New commits:
commit 64100e7f1f6b550e952838fce38615ec3788e17c
Author: Fabio D'Urso <fabiodurso at hotmail.it>
Date: Sat Dec 28 12:11:47 2013 +0100
Simplify some calls to GooString::format-family functions
diff --git a/poppler/Object.h b/poppler/Object.h
index a299624..15bea15 100644
--- a/poppler/Object.h
+++ b/poppler/Object.h
@@ -45,14 +45,14 @@
#define OBJECT_TYPE_CHECK(wanted_type) \
if (unlikely(type != wanted_type)) { \
- error(errInternal, 0, (char *) "Call to Object where the object was type {0:d}, " \
+ error(errInternal, 0, "Call to Object where the object was type {0:d}, " \
"not the expected type {1:d}", type, wanted_type); \
abort(); \
}
#define OBJECT_3TYPES_CHECK(wanted_type1, wanted_type2, wanted_type3) \
if (unlikely(type != wanted_type1) && unlikely(type != wanted_type2) && unlikely(type != wanted_type3)) { \
- error(errInternal, 0, (char *) "Call to Object where the object was type {0:d}, " \
+ error(errInternal, 0, "Call to Object where the object was type {0:d}, " \
"not the expected type {1:d}, {2:d} or {3:d}", type, wanted_type1, wanted_type2, wanted_type3); \
abort(); \
}
diff --git a/utils/pdftocairo.cc b/utils/pdftocairo.cc
index 6c677bd..f67007f 100644
--- a/utils/pdftocairo.cc
+++ b/utils/pdftocairo.cc
@@ -674,7 +674,7 @@ static GooString *getImageFileName(GooString *outputFileName, int numDigits, int
GooString *imageName = new GooString(outputFileName);
if (!singleFile) {
snprintf(buf, sizeof(buf), "-%0*d", numDigits, page);
- imageName->appendf(buf);
+ imageName->append(buf);
}
if (png)
imageName->append(".png");
commit 0abde34d0f7ba0fc04a30dbfd78373ec9d9d0695
Author: Fabio D'Urso <fabiodurso at hotmail.it>
Date: Sat Dec 28 12:11:05 2013 +0100
Fixed some GooString format markers
diff --git a/poppler/CMap.cc b/poppler/CMap.cc
index 13f293a..6731ab5 100644
--- a/poppler/CMap.cc
+++ b/poppler/CMap.cc
@@ -15,6 +15,7 @@
//
// Copyright (C) 2008 Koji Otani <sho at bbr.jp>
// Copyright (C) 2008, 2009 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2013 Fabio D'Urso <fabiodurso at hotmail.it>
//
// 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
@@ -420,7 +421,7 @@ void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) {
for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) {
if (vec[byte].isVector) {
error(errSyntaxError, -1,
- "Invalid CID ({0:x} - {1:x} [{2:d} bytes]) in CMap",
+ "Invalid CID ({0:ux} - {1:ux} [{2:ud} bytes]) in CMap",
start, end, nBytes);
} else {
vec[byte].cid = cid;
diff --git a/poppler/Function.cc b/poppler/Function.cc
index 2f94a54..81829ec 100644
--- a/poppler/Function.cc
+++ b/poppler/Function.cc
@@ -19,6 +19,7 @@
// Copyright (C) 2011 Andrea Canciani <ranma42 at gmail.com>
// Copyright (C) 2012 Thomas Freitag <Thomas.Freitag at alfa.de>
// Copyright (C) 2012 Adam Reichold <adamreichold at myopera.com>
+// Copyright (C) 2013 Fabio D'Urso <fabiodurso at hotmail.it>
//
// 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
@@ -1194,7 +1195,7 @@ PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) {
codeString = new GooString();
str->reset();
if (!(tok = getToken(str)) || tok->cmp("{")) {
- error(errSyntaxError, -1, "Expected '{' at start of PostScript function");
+ error(errSyntaxError, -1, "Expected '{{' at start of PostScript function");
if (tok) {
delete tok;
}
diff --git a/poppler/StructElement.cc b/poppler/StructElement.cc
index 3a98658..6392433 100644
--- a/poppler/StructElement.cc
+++ b/poppler/StructElement.cc
@@ -1260,7 +1260,7 @@ StructElement *StructElement::parseChild(Object *ref,
child = new StructElement(childObj->getDict(), treeRoot, this, seen);
} else {
error(errSyntaxWarning, -1,
- "Loop detected in structure tree, skipping subtree at object {0:i}:{0:i}",
+ "Loop detected in structure tree, skipping subtree at object {0:d}:{1:d}",
ref->getRefNum(), ref->getRefGen());
}
} else {
commit a7da4c6ac2b13308803806009c3437332b140586
Author: Fabio D'Urso <fabiodurso at hotmail.it>
Date: Fri Dec 27 17:09:39 2013 +0100
GooString format: fixed bug with printing LLONG_MIN
( -LLONG_MIN doesn't fit in a signed long long )
diff --git a/goo/GooString.cc b/goo/GooString.cc
index e27f158..8591d95 100644
--- a/goo/GooString.cc
+++ b/goo/GooString.cc
@@ -20,7 +20,7 @@
// Copyright (C) 2007 Jeff Muizelaar <jeff at infidigm.net>
// Copyright (C) 2008-2011 Albert Astals Cid <aacid at kde.org>
// Copyright (C) 2011 Kenji Uno <ku at digitaldolphins.jp>
-// Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso at hotmail.it>
// Copyright (C) 2012 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2012 Pino Toscano <pino at kde.org>
// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
@@ -651,18 +651,25 @@ void GooString::formatInt(long x, char *buf, int bufSize,
const char *vals = upperCase ? upperCaseDigits : lowerCaseDigits;
GBool neg;
int start, i, j;
+#ifdef LLONG_MAX
+ unsigned long long abs_x;
+#else
+ unsigned long abs_x;
+#endif
i = bufSize;
if ((neg = x < 0)) {
- x = -x;
+ abs_x = -x;
+ } else {
+ abs_x = x;
}
start = neg ? 1 : 0;
- if (x == 0) {
+ if (abs_x == 0) {
buf[--i] = '0';
} else {
- while (i > start && x) {
- buf[--i] = vals[x % base];
- x /= base;
+ while (i > start && abs_x) {
+ buf[--i] = vals[abs_x % base];
+ abs_x /= base;
}
}
if (zeroFill) {
commit fe88f20cc565b4cf4765fed56c821989148ef454
Author: Fabio D'Urso <fabiodurso at hotmail.it>
Date: Fri Dec 27 17:08:50 2013 +0100
GooString format: Added some tests + improved documentation
diff --git a/goo/GooString.h b/goo/GooString.h
index e92a889..6bdcf06 100644
--- a/goo/GooString.h
+++ b/goo/GooString.h
@@ -18,7 +18,7 @@
// Copyright (C) 2006 Kristian Høgsberg <krh at redhat.com>
// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk at gmail.com>
// Copyright (C) 2008-2010, 2012 Albert Astals Cid <aacid at kde.org>
-// Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso at hotmail.it>
// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
@@ -87,8 +87,12 @@ public:
// 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
+ // f, g, gs -- floating point (float or double)
+ // f -- always prints trailing zeros (eg 1.0 with .2f will print 1.00)
+ // g -- omits trailing zeros and, if possible, the dot (eg 1.0 shows up as 1)
+ // gs -- is like g, but treats <precision> as number of significant
+ // digits to show (eg 0.0123 with .2gs will print 0.012)
+ // c -- character (char, short or int)
// s -- string (char *)
// t -- GooString *
// w -- blank space; arg determines width
diff --git a/qt4/tests/check_goostring.cpp b/qt4/tests/check_goostring.cpp
index 07999b5..69f7cdc 100644
--- a/qt4/tests/check_goostring.cpp
+++ b/qt4/tests/check_goostring.cpp
@@ -1,3 +1,4 @@
+#include <QtCore/QScopedPointer>
#include <QtTest/QtTest>
#include "goo/GooString.h"
@@ -9,6 +10,7 @@ private slots:
void testInsertData_data();
void testInsertData();
void testInsert();
+ void testFormat();
};
void TestGooString::testInsertData_data()
@@ -56,6 +58,70 @@ void TestGooString::testInsert()
}
}
+void TestGooString::testFormat()
+{
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{1:x}", 1, 0xF));
+ QCOMPARE(goo->getCString(), "1,f");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b},{0:w}", 0xA));
+ QCOMPARE(goo->getCString(), "10,a,A,12,1010, ");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b}", -0xA));
+ QCOMPARE(goo->getCString(), "-10,-a,-A,-12,-1010");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:c}{1:c}{2:c}{3:c}",
+ 'T', (char)'E', (short)'S', (int)'T'));
+ QCOMPARE(goo->getCString(), "TEST");
+
+ const QScopedPointer<GooString> goo2(GooString::format("{0:s} {1:t}", "TEST", goo.data()));
+ QCOMPARE(goo2->getCString(), "TEST TEST");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:ud} {1:d} {2:d}",
+ UINT_MAX, INT_MAX, INT_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(UINT_MAX).arg(INT_MAX).arg(INT_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:uld} {1:ld} {2:ld}",
+ ULONG_MAX, LONG_MAX, LONG_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(ULONG_MAX).arg(LONG_MAX).arg(LONG_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:ulld} {1:lld} {2:lld}",
+ ULLONG_MAX, LLONG_MAX, LLONG_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(ULLONG_MAX).arg(LLONG_MAX).arg(LLONG_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> gooD(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1., .012));
+ const QScopedPointer<GooString> gooF(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1.f, .012f));
+ QCOMPARE(gooD->getCString(), "1.0 1 1 | 0.0 0 0.01");
+ QCOMPARE(gooF->getCString(), "1.0 1 1 | 0.0 0 0.01");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:.4f} {0:.4g} {0:.4gs}", .012));
+ QCOMPARE(goo->getCString(), "0.0120 0.012 0.012");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{{ SomeText {0:d} }}", 1));
+ QCOMPARE(goo->getCString(), "{ SomeText 1 }");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{{{{ {{ SomeText {0:d}", 2));
+ QCOMPARE(goo->getCString(), "{{ { SomeText 2");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("SomeText {0:d} }} }}}}", 3));
+ QCOMPARE(goo->getCString(), "SomeText 3 } }}");
+ }
+}
+
QTEST_MAIN(TestGooString)
#include "check_goostring.moc"
diff --git a/qt5/tests/check_goostring.cpp b/qt5/tests/check_goostring.cpp
index 07999b5..69f7cdc 100644
--- a/qt5/tests/check_goostring.cpp
+++ b/qt5/tests/check_goostring.cpp
@@ -1,3 +1,4 @@
+#include <QtCore/QScopedPointer>
#include <QtTest/QtTest>
#include "goo/GooString.h"
@@ -9,6 +10,7 @@ private slots:
void testInsertData_data();
void testInsertData();
void testInsert();
+ void testFormat();
};
void TestGooString::testInsertData_data()
@@ -56,6 +58,70 @@ void TestGooString::testInsert()
}
}
+void TestGooString::testFormat()
+{
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{1:x}", 1, 0xF));
+ QCOMPARE(goo->getCString(), "1,f");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b},{0:w}", 0xA));
+ QCOMPARE(goo->getCString(), "10,a,A,12,1010, ");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b}", -0xA));
+ QCOMPARE(goo->getCString(), "-10,-a,-A,-12,-1010");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:c}{1:c}{2:c}{3:c}",
+ 'T', (char)'E', (short)'S', (int)'T'));
+ QCOMPARE(goo->getCString(), "TEST");
+
+ const QScopedPointer<GooString> goo2(GooString::format("{0:s} {1:t}", "TEST", goo.data()));
+ QCOMPARE(goo2->getCString(), "TEST TEST");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:ud} {1:d} {2:d}",
+ UINT_MAX, INT_MAX, INT_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(UINT_MAX).arg(INT_MAX).arg(INT_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:uld} {1:ld} {2:ld}",
+ ULONG_MAX, LONG_MAX, LONG_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(ULONG_MAX).arg(LONG_MAX).arg(LONG_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:ulld} {1:lld} {2:lld}",
+ ULLONG_MAX, LLONG_MAX, LLONG_MIN));
+ const QByteArray expected = QString("%1 %2 %3").arg(ULLONG_MAX).arg(LLONG_MAX).arg(LLONG_MIN).toLatin1();
+ QCOMPARE(goo->getCString(), expected.constData());
+ }
+ {
+ const QScopedPointer<GooString> gooD(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1., .012));
+ const QScopedPointer<GooString> gooF(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1.f, .012f));
+ QCOMPARE(gooD->getCString(), "1.0 1 1 | 0.0 0 0.01");
+ QCOMPARE(gooF->getCString(), "1.0 1 1 | 0.0 0 0.01");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{0:.4f} {0:.4g} {0:.4gs}", .012));
+ QCOMPARE(goo->getCString(), "0.0120 0.012 0.012");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{{ SomeText {0:d} }}", 1));
+ QCOMPARE(goo->getCString(), "{ SomeText 1 }");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("{{{{ {{ SomeText {0:d}", 2));
+ QCOMPARE(goo->getCString(), "{{ { SomeText 2");
+ }
+ {
+ const QScopedPointer<GooString> goo(GooString::format("SomeText {0:d} }} }}}}", 3));
+ QCOMPARE(goo->getCString(), "SomeText 3 } }}");
+ }
+}
+
QTEST_MAIN(TestGooString)
#include "check_goostring.moc"
More information about the poppler
mailing list