[poppler] configure.ac qt4/src splash/SplashMath.h utils/pdftoppm.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Tue Nov 17 11:35:52 PST 2009


 configure.ac                  |   60 ++++++++++++++----------------
 qt4/src/poppler-annotation.cc |   82 +++++++++++++++++++++---------------------
 splash/SplashMath.h           |    5 +-
 utils/pdftoppm.cc             |    8 ++++
 4 files changed, 81 insertions(+), 74 deletions(-)

New commits:
commit 1844e0927ae89824f59b2b3378bf5e00a51a251c
Author: Albert Astals Cid <aacid at kde.org>
Date:   Tue Nov 17 20:34:24 2009 +0100

    do not use setAttribute with doubles
    
    it is evil and locale dependant, we do NOT want that so use QString::number

diff --git a/configure.ac b/configure.ac
index 0ff2c59..8cd5781 100644
--- a/configure.ac
+++ b/configure.ac
@@ -109,6 +109,35 @@ fi
 dnl ##### Checks for library functions.
 AC_CHECK_FUNCS(popen mkstemp mkstemps)
 
+dnl Test for libopenjpeg
+AC_ARG_ENABLE(libopenjpeg,
+	      AC_HELP_STRING([--disable-libopenjpeg],
+	                     [Don't build against libopenjpeg.]),
+              enable_libopenjpeg=$enableval,
+              enable_libopenjpeg="try")
+if test x$enable_libopenjpeg = xyes; then
+  AC_CHECK_LIB([openjpeg], [opj_cio_open],,
+	       AC_MSG_ERROR("*** libopenjpeg library not found ***"))
+  AC_CHECK_HEADERS([openjpeg.h],,
+		   AC_MSG_ERROR("*** libopenjpeg headers not found ***"))
+elif test x$enable_libopenjpeg = xtry; then
+  AC_CHECK_LIB([openjpeg], [opj_cio_open],
+               [enable_libopenjpeg="yes"],
+	       [enable_libopenjpeg="no"])
+  AC_CHECK_HEADERS([openjpeg.h],,
+		   [enable_libopenjpeg="no"])
+fi
+
+if test x$enable_libopenjpeg = xyes; then
+  LIBOPENJPEG_LIBS="-lopenjpeg"
+  AC_SUBST(LIBOPENJPEG_LIBS)
+  AC_DEFINE(ENABLE_LIBOPENJPEG)
+fi
+
+AM_CONDITIONAL(BUILD_LIBOPENJPEG, test x$enable_libopenjpeg = xyes)
+AH_TEMPLATE([ENABLE_LIBOPENJPEG],
+	    [Use libopenjpeg instead of builtin jpeg2000 decoder.])
+
 dnl ##### Back to C for the library tests.
 AC_LANG_C
 
@@ -150,37 +179,6 @@ AH_TEMPLATE([ENABLE_ZLIB],
 	    [Use zlib instead of builtin zlib decoder.])
 
 
-dnl Test for libopenjpeg
-AC_ARG_ENABLE(libopenjpeg,
-	      AC_HELP_STRING([--disable-libopenjpeg],
-	                     [Don't build against libopenjpeg.]),
-              enable_libopenjpeg=$enableval,
-              enable_libopenjpeg="try")
-if test x$enable_libopenjpeg = xyes; then
-  AC_CHECK_LIB([openjpeg], [opj_cio_open],,
-	       AC_MSG_ERROR("*** libopenjpeg library not found ***"))
-  AC_CHECK_HEADERS([openjpeg.h],,
-		   AC_MSG_ERROR("*** libopenjpeg headers not found ***"))
-elif test x$enable_libopenjpeg = xtry; then
-  AC_CHECK_LIB([openjpeg], [opj_cio_open],
-               [enable_libopenjpeg="yes"],
-	       [enable_libopenjpeg="no"])
-  AC_CHECK_HEADERS([openjpeg.h],,
-		   [enable_libopenjpeg="no"])
-fi
-
-if test x$enable_libopenjpeg = xyes; then
-  LIBOPENJPEG_LIBS="-lopenjpeg"
-  AC_SUBST(LIBOPENJPEG_LIBS)
-  AC_DEFINE(ENABLE_LIBOPENJPEG)
-fi
-
-AM_CONDITIONAL(BUILD_LIBOPENJPEG, test x$enable_libopenjpeg = xyes)
-AH_TEMPLATE([ENABLE_LIBOPENJPEG],
-	    [Use libopenjpeg instead of builtin jpeg2000 decoder.])
-
-
-
 dnl Test for libjpeg
 AC_ARG_ENABLE(libjpeg,
 	      AC_HELP_STRING([--disable-libjpeg],
diff --git a/qt4/src/poppler-annotation.cc b/qt4/src/poppler-annotation.cc
index b8b6a52..22f1e6a 100644
--- a/qt4/src/poppler-annotation.cc
+++ b/qt4/src/poppler-annotation.cc
@@ -1,5 +1,5 @@
 /* poppler-annotation.cc: qt interface to poppler
- * Copyright (C) 2006, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2006, 2009 Albert Astals Cid <aacid at kde.org>
  * Copyright (C) 2006, 2008 Pino Toscano <pino at kde.org>
  * Adapting code from
  *   Copyright (C) 2004 by Enrico Ros <eros.kde at email.it>
@@ -267,15 +267,15 @@ void Annotation::store( QDomNode & annNode, QDomDocument & document ) const
     if ( style.color.isValid() && style.color != Qt::black )
         e.setAttribute( "color", style.color.name() );
     if ( style.opacity != 1.0 )
-        e.setAttribute( "opacity", style.opacity );
+        e.setAttribute( "opacity", QString::number( style.opacity ) );
 
     // Sub-Node-1 - boundary
     QDomElement bE = document.createElement( "boundary" );
     e.appendChild( bE );
-    bE.setAttribute( "l", (double)d->boundary.left() );
-    bE.setAttribute( "t", (double)d->boundary.top() );
-    bE.setAttribute( "r", (double)d->boundary.right() );
-    bE.setAttribute( "b", (double)d->boundary.bottom() );
+    bE.setAttribute( "l", QString::number( (double)d->boundary.left() ) );
+    bE.setAttribute( "t", QString::number( (double)d->boundary.top() ) );
+    bE.setAttribute( "r", QString::number( (double)d->boundary.right() ) );
+    bE.setAttribute( "b", QString::number( (double)d->boundary.bottom() ) );
 
     // Sub-Node-2 - penStyle
     if ( style.width != 1 || style.style != Solid || style.xCorners != 0 ||
@@ -283,10 +283,10 @@ void Annotation::store( QDomNode & annNode, QDomDocument & document ) const
     {
         QDomElement psE = document.createElement( "penStyle" );
         e.appendChild( psE );
-        psE.setAttribute( "width", style.width );
+        psE.setAttribute( "width", QString::number( style.width ) );
         psE.setAttribute( "style", (int)style.style );
-        psE.setAttribute( "xcr", style.xCorners );
-        psE.setAttribute( "ycr", style.yCorners );
+        psE.setAttribute( "xcr", QString::number( style.xCorners ) );
+        psE.setAttribute( "ycr", QString::number( style.yCorners ) );
         psE.setAttribute( "marks", style.marks );
         psE.setAttribute( "spaces", style.spaces );
     }
@@ -297,7 +297,7 @@ void Annotation::store( QDomNode & annNode, QDomDocument & document ) const
         QDomElement peE = document.createElement( "penEffect" );
         e.appendChild( peE );
         peE.setAttribute( "effect", (int)style.effect );
-        peE.setAttribute( "intensity", style.effectIntensity );
+        peE.setAttribute( "intensity", QString::number( style.effectIntensity ) );
     }
 
     // Sub-Node-4 - window
@@ -307,8 +307,8 @@ void Annotation::store( QDomNode & annNode, QDomDocument & document ) const
         QDomElement wE = document.createElement( "window" );
         e.appendChild( wE );
         wE.setAttribute( "flags", window.flags );
-        wE.setAttribute( "top", window.topLeft.x() );
-        wE.setAttribute( "left", window.topLeft.y() );
+        wE.setAttribute( "top", QString::number( window.topLeft.x() ) );
+        wE.setAttribute( "left", QString::number( window.topLeft.y() ) );
         wE.setAttribute( "width", window.width );
         wE.setAttribute( "height", window.height );
         wE.setAttribute( "title", window.title );
@@ -563,12 +563,12 @@ void TextAnnotation::store( QDomNode & node, QDomDocument & document ) const
     {
         QDomElement calloutElement = document.createElement( "callout" );
         textElement.appendChild( calloutElement );
-        calloutElement.setAttribute( "ax", d->inplaceCallout[0].x() );
-        calloutElement.setAttribute( "ay", d->inplaceCallout[0].y() );
-        calloutElement.setAttribute( "bx", d->inplaceCallout[1].x() );
-        calloutElement.setAttribute( "by", d->inplaceCallout[1].y() );
-        calloutElement.setAttribute( "cx", d->inplaceCallout[2].x() );
-        calloutElement.setAttribute( "cy", d->inplaceCallout[2].y() );
+        calloutElement.setAttribute( "ax", QString::number( d->inplaceCallout[0].x() ) );
+        calloutElement.setAttribute( "ay", QString::number( d->inplaceCallout[0].y() ) );
+        calloutElement.setAttribute( "bx", QString::number( d->inplaceCallout[1].x() ) );
+        calloutElement.setAttribute( "by", QString::number( d->inplaceCallout[1].y() ) );
+        calloutElement.setAttribute( "cx", QString::number( d->inplaceCallout[2].x() ) );
+        calloutElement.setAttribute( "cy", QString::number( d->inplaceCallout[2].y() ) );
     }
 }
 
@@ -774,9 +774,9 @@ void LineAnnotation::store( QDomNode & node, QDomDocument & document ) const
     if ( d->lineInnerColor.isValid() )
         lineElement.setAttribute( "innerColor", d->lineInnerColor.name() );
     if ( d->lineLeadingFwdPt != 0.0 )
-        lineElement.setAttribute( "leadFwd", d->lineLeadingFwdPt );
+        lineElement.setAttribute( "leadFwd", QString::number( d->lineLeadingFwdPt ) );
     if ( d->lineLeadingBackPt != 0.0 )
-        lineElement.setAttribute( "leadBack", d->lineLeadingBackPt );
+        lineElement.setAttribute( "leadBack", QString::number( d->lineLeadingBackPt ) );
     if ( d->lineShowCaption )
         lineElement.setAttribute( "showCaption", d->lineShowCaption );
     if ( d->lineIntent != Unknown )
@@ -792,8 +792,8 @@ void LineAnnotation::store( QDomNode & node, QDomDocument & document ) const
             const QPointF & p = *it;
             QDomElement pElement = document.createElement( "point" );
             lineElement.appendChild( pElement );
-            pElement.setAttribute( "x", p.x() );
-            pElement.setAttribute( "y", p.y() );
+            pElement.setAttribute( "x", QString::number( p.x() ) );
+            pElement.setAttribute( "y", QString::number( p.y() ) );
             ++it;
         }
     }
@@ -1122,19 +1122,19 @@ void HighlightAnnotation::store( QDomNode & node, QDomDocument & document ) cons
         QDomElement quadElement = document.createElement( "quad" );
         hlElement.appendChild( quadElement );
         const Quad & q = *it;
-        quadElement.setAttribute( "ax", q.points[0].x() );
-        quadElement.setAttribute( "ay", q.points[0].y() );
-        quadElement.setAttribute( "bx", q.points[1].x() );
-        quadElement.setAttribute( "by", q.points[1].y() );
-        quadElement.setAttribute( "cx", q.points[2].x() );
-        quadElement.setAttribute( "cy", q.points[2].y() );
-        quadElement.setAttribute( "dx", q.points[3].x() );
-        quadElement.setAttribute( "dy", q.points[3].y() );
+        quadElement.setAttribute( "ax", QString::number( q.points[0].x() ) );
+        quadElement.setAttribute( "ay", QString::number( q.points[0].y() ) );
+        quadElement.setAttribute( "bx", QString::number( q.points[1].x() ) );
+        quadElement.setAttribute( "by", QString::number( q.points[1].y() ) );
+        quadElement.setAttribute( "cx", QString::number( q.points[2].x() ) );
+        quadElement.setAttribute( "cy", QString::number( q.points[2].y() ) );
+        quadElement.setAttribute( "dx", QString::number( q.points[3].x() ) );
+        quadElement.setAttribute( "dy", QString::number( q.points[3].y() ) );
         if ( q.capStart )
             quadElement.setAttribute( "start", 1 );
         if ( q.capEnd )
             quadElement.setAttribute( "end", 1 );
-        quadElement.setAttribute( "feather", q.feather );
+        quadElement.setAttribute( "feather", QString::number( q.feather ) );
     }
 }
 
@@ -1345,8 +1345,8 @@ void InkAnnotation::store( QDomNode & node, QDomDocument & document ) const
             const QPointF & point = *iIt;
             QDomElement pointElement = document.createElement( "point" );
             pathElement.appendChild( pointElement );
-            pointElement.setAttribute( "x", point.x() );
-            pointElement.setAttribute( "y", point.y() );
+            pointElement.setAttribute( "x", QString::number( point.x() ) );
+            pointElement.setAttribute( "y", QString::number( point.y() ) );
         }
     }
 }
@@ -1522,14 +1522,14 @@ void LinkAnnotation::store( QDomNode & node, QDomDocument & document ) const
     // saving region
     QDomElement quadElement = document.createElement( "quad" );
     linkElement.appendChild( quadElement );
-    quadElement.setAttribute( "ax", d->linkRegion[0].x() );
-    quadElement.setAttribute( "ay", d->linkRegion[0].y() );
-    quadElement.setAttribute( "bx", d->linkRegion[1].x() );
-    quadElement.setAttribute( "by", d->linkRegion[1].y() );
-    quadElement.setAttribute( "cx", d->linkRegion[2].x() );
-    quadElement.setAttribute( "cy", d->linkRegion[2].y() );
-    quadElement.setAttribute( "dx", d->linkRegion[3].x() );
-    quadElement.setAttribute( "dy", d->linkRegion[3].y() );
+    quadElement.setAttribute( "ax", QString::number( d->linkRegion[0].x() ) );
+    quadElement.setAttribute( "ay", QString::number( d->linkRegion[0].y() ) );
+    quadElement.setAttribute( "bx", QString::number( d->linkRegion[1].x() ) );
+    quadElement.setAttribute( "by", QString::number( d->linkRegion[1].y() ) );
+    quadElement.setAttribute( "cx", QString::number( d->linkRegion[2].x() ) );
+    quadElement.setAttribute( "cy", QString::number( d->linkRegion[2].y() ) );
+    quadElement.setAttribute( "dx", QString::number( d->linkRegion[3].x() ) );
+    quadElement.setAttribute( "dy", QString::number( d->linkRegion[3].y() ) );
 
     // saving link
     QDomElement hyperlinkElement = document.createElement( "link" );
diff --git a/splash/SplashMath.h b/splash/SplashMath.h
index 7a8c8e3..3b72f74 100644
--- a/splash/SplashMath.h
+++ b/splash/SplashMath.h
@@ -26,7 +26,8 @@ static inline int splashFloor(SplashCoord x) {
   #if USE_FIXEDPOINT
     return FixedPoint::floor(x);
   #else
-    return (int)floor(x);
+    if (x > 0) return (int)x;
+    else return (int)floor(x);
   #endif
 }
 
@@ -42,7 +43,7 @@ static inline int splashRound(SplashCoord x) {
 #if USE_FIXEDPOINT
   return FixedPoint::round(x);
 #else
-  return (int)floor(x + 0.5);
+  return (int)splashFloor(x + 0.5);
 #endif
 }
 
diff --git a/utils/pdftoppm.cc b/utils/pdftoppm.cc
index e27aa44..4ebf4db 100644
--- a/utils/pdftoppm.cc
+++ b/utils/pdftoppm.cc
@@ -42,6 +42,8 @@
 
 static int firstPage = 1;
 static int lastPage = 0;
+static GBool printOnlyOdd = gFalse;
+static GBool printOnlyEven = gFalse;
 static double resolution = 0.0;
 static double x_resolution = 150.0;
 static double y_resolution = 150.0;
@@ -72,6 +74,10 @@ static const ArgDesc argDesc[] = {
    "first page to print"},
   {"-l",      argInt,      &lastPage,      0,
    "last page to print"},
+  {"-o",      argFlag,      &printOnlyOdd, 0,
+   "print only odd pages"},
+  {"-e",      argFlag,      &printOnlyEven, 0,
+   "print only even pages"},
 
   {"-r",      argFP,       &resolution,    0,
    "resolution, in DPI (default is 150)"},
@@ -284,6 +290,8 @@ int main(int argc, char *argv[]) {
   if (sz != 0) w = h = sz;
   pg_num_len = (int)ceil(log((double)doc->getNumPages()) / log((double)10));
   for (pg = firstPage; pg <= lastPage; ++pg) {
+    if (printOnlyEven && pg % 2 == 0) continue;
+    if (printOnlyOdd && pg % 2 == 1) continue;
     if (useCropBox) {
       pg_w = doc->getPageCropWidth(pg);
       pg_h = doc->getPageCropHeight(pg);


More information about the poppler mailing list