<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-1072</id>
	<title>Nabble - Free Desktop - poppler</title>
	<updated>2009-12-14T18:28:54Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Free-Desktop---poppler-f1072.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Free-Desktop---poppler-f1072.html" />
	<subtitle type="html">PDF rendering library.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26788465</id>
	<title>Trying to extend pdftoppm to use CairoOutputDev</title>
	<published>2009-12-14T18:28:54Z</published>
	<updated>2009-12-14T18:28:54Z</updated>
	<author>
		<name>mpsuzuki</name>
	</author>
	<content type="html">Dear Poppler developers,
&lt;br&gt;&lt;br&gt;Before all, I thank poppler developers for writing excellent
&lt;br&gt;software. The addition of CairoOutputDev is very interesting.
&lt;br&gt;&lt;br&gt;Now I'm trying to extend pdftoppm to draw on CairoOutputDev.
&lt;br&gt;My motivation is splitting a large table in PDF document
&lt;br&gt;into small PDFs for each cell.
&lt;br&gt;&lt;br&gt;Recent poppler has a feature to draw on cairo surface, so
&lt;br&gt;I think it is possible to do such by pdftoppm draw a cell
&lt;br&gt;(by the specification of geometry for a cell) on cairo surface,
&lt;br&gt;something like:
&lt;br&gt;&lt;br&gt;&amp;nbsp; pdftoppm \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-f [page_num] -l [page_num] \ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-r [dpi_to_specify_the_unit_of_geometry] \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-x [cell_pos_x] -y [cell_pos_y] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-w [cell_width] -h [cell_height] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-pdf [input_table.pdf] [output_cell_prefix]
&lt;br&gt;&lt;br&gt;Attached patch is an experiment doing such, please comment
&lt;br&gt;what should be improved for the official adoption.
&lt;br&gt;&lt;br&gt;By default, &amp;quot;-r&amp;quot; option for &amp;quot;pdftoppm -pdf&amp;quot; is used only
&lt;br&gt;as an unit to calculate the geometry to be cropped, and
&lt;br&gt;it does not change the resolution of output PDF. This is
&lt;br&gt;inconsistent with &amp;quot;-r&amp;quot; option for SplashOutputDev cases.
&lt;br&gt;If MODIFY_RESOLUTION_IN_PDF2CAIRO is defined in the compilation,
&lt;br&gt;the behaviour of &amp;quot;-r&amp;quot; is consistent with the case of
&lt;br&gt;SplashOutputDev.
&lt;br&gt;&lt;br&gt;The problems that I've already recognized are:
&lt;br&gt;&lt;br&gt;* If a PDF including large image (e.g. PDF generated by 
&lt;br&gt;&amp;nbsp; image scanners) is given, the cropped PDF includes 
&lt;br&gt;&amp;nbsp; whole image object, not cropped image object.
&lt;br&gt;&amp;nbsp; The filesize of cropped PDF is not reduced.
&lt;br&gt;&lt;br&gt;* When multiple pages are rendered (e.g. pdftoppm -pdf
&lt;br&gt;&amp;nbsp; -f 1 -l 100 ...), startDoc() is invoked for each
&lt;br&gt;&amp;nbsp; output file. As a result, the rendering speed is
&lt;br&gt;&amp;nbsp; slower than that of SplashOutputDev.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;mpsuzuki
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[pdftoppm-cairo.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;diff --git a/utils/Makefile.am b/utils/Makefile.am
&lt;br&gt;index e57c71b..48bb7a7 100644
&lt;br&gt;--- a/utils/Makefile.am
&lt;br&gt;+++ b/utils/Makefile.am
&lt;br&gt;@@ -4,6 +4,11 @@ pdftoppm_SOURCES =				\
&lt;br&gt;&amp;nbsp;	pdftoppm.cc				\
&lt;br&gt;&amp;nbsp;	$(common)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+pdftoppm_LDADD =				\
&lt;br&gt;+	$(LDADD)				\
&lt;br&gt;+	$(top_builddir)/poppler/libpoppler-cairo.la	\
&lt;br&gt;+	$(CAIRO_LIBS)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;pdftoppm_binary = pdftoppm
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;pdftoppm_manpage = pdftoppm.1
&lt;br&gt;@@ -17,6 +22,7 @@ INCLUDES =					\
&lt;br&gt;&amp;nbsp;	-I$(top_srcdir)/poppler			\
&lt;br&gt;&amp;nbsp;	$(UTILS_CFLAGS)				\
&lt;br&gt;&amp;nbsp;	$(FONTCONFIG_CFLAGS)			\
&lt;br&gt;+	$(CAIRO_CFLAGS)				\
&lt;br&gt;&amp;nbsp;	$(ABIWORD_CFLAGS)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;LDADD =						\
&lt;br&gt;diff --git a/utils/pdftoppm.cc b/utils/pdftoppm.cc
&lt;br&gt;index e27aa44..8d486df 100644
&lt;br&gt;--- a/utils/pdftoppm.cc
&lt;br&gt;+++ b/utils/pdftoppm.cc
&lt;br&gt;@@ -37,6 +37,8 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;splash/SplashBitmap.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;splash/Splash.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;SplashOutputDev.h&amp;quot;
&lt;br&gt;+#include &amp;quot;CairoOutputDev.h&amp;quot;
&lt;br&gt;+#include &amp;lt;cairo-pdf.h&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define PPM_FILE_SZ 512
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -58,6 +60,7 @@ static GBool mono = gFalse;
&lt;br&gt;&amp;nbsp;static GBool gray = gFalse;
&lt;br&gt;&amp;nbsp;static GBool png = gFalse;
&lt;br&gt;&amp;nbsp;static GBool jpeg = gFalse;
&lt;br&gt;+static GBool pdf = gFalse;
&lt;br&gt;&amp;nbsp;static char enableFreeTypeStr[16] = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;static char antialiasStr[16] = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;static char vectorAntialiasStr[16] = &amp;quot;&amp;quot;;
&lt;br&gt;@@ -111,6 +114,10 @@ static const ArgDesc argDesc[] = {
&lt;br&gt;&amp;nbsp; &amp;nbsp;{&amp;quot;-jpeg&amp;quot;, &amp;nbsp; &amp;nbsp;argFlag, &amp;nbsp; &amp;nbsp; &amp;jpeg, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;generate a JPEG file&amp;quot;},
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;+#if HAVE_CAIRO
&lt;br&gt;+ &amp;nbsp;{&amp;quot;-pdf&amp;quot;, &amp;nbsp; &amp;nbsp;argFlag, &amp;nbsp; &amp;nbsp; &amp;pdf, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;+ &amp;nbsp; &amp;quot;generate a PDF file&amp;quot;},
&lt;br&gt;+#endif
&lt;br&gt;&amp;nbsp;#if HAVE_FREETYPE_FREETYPE_H | HAVE_FREETYPE_H
&lt;br&gt;&amp;nbsp; &amp;nbsp;{&amp;quot;-freetype&amp;quot;, &amp;nbsp; argString, &amp;nbsp; &amp;nbsp; &amp;nbsp;enableFreeTypeStr, sizeof(enableFreeTypeStr),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;enable FreeType font rasterizer: yes, no&amp;quot;},
&lt;br&gt;@@ -177,6 +184,22 @@ static void savePageSlice(PDFDoc *doc,
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static void savePageSliceCairo(PDFDoc *doc,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CairoOutputDev *cairoOut,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int pg, int x, int y, int w, int h, 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double pg_w, double pg_h) {
&lt;br&gt;+ &amp;nbsp;if (w == 0) w = (int)ceil(pg_w);
&lt;br&gt;+ &amp;nbsp;if (h == 0) h = (int)ceil(pg_h);
&lt;br&gt;+ &amp;nbsp;w = (x+w &amp;gt; pg_w ? (int)ceil(pg_w-x) : w);
&lt;br&gt;+ &amp;nbsp;h = (y+h &amp;gt; pg_h ? (int)ceil(pg_h-y) : h);
&lt;br&gt;+
&lt;br&gt;+#ifdef MODIFY_RESOLUTION_IN_PDF2CAIRO
&lt;br&gt;+ &amp;nbsp;doc-&amp;gt;displayPageSlice(cairoOut, pg, x_resolution, y_resolution, 0, !useCropBox, gFalse, gFalse, x, y, w, h);
&lt;br&gt;+#else
&lt;br&gt;+ &amp;nbsp;doc-&amp;gt;displayPageSlice(cairoOut, pg, 72, 72, 0, !useCropBox, gFalse, gFalse, x, y, w, h);
&lt;br&gt;+#endif
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;int main(int argc, char *argv[]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;PDFDoc *doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp;GooString *fileName = NULL;
&lt;br&gt;@@ -185,6 +208,11 @@ int main(int argc, char *argv[]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;GooString *ownerPW, *userPW;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SplashColor paperColor;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SplashOutputDev *splashOut;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;cairo_surface_t *surface = NULL;
&lt;br&gt;+ &amp;nbsp;cairo_t* cr = NULL;
&lt;br&gt;+ &amp;nbsp;CairoOutputDev *cairoOut = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;GBool ok;
&lt;br&gt;&amp;nbsp; &amp;nbsp;int exitCode;
&lt;br&gt;&amp;nbsp; &amp;nbsp;int pg, pg_num_len;
&lt;br&gt;@@ -272,15 +300,18 @@ int main(int argc, char *argv[]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (lastPage &amp;lt; 1 || lastPage &amp;gt; doc-&amp;gt;getNumPages())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;lastPage = doc-&amp;gt;getNumPages();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// write PPM files
&lt;br&gt;- &amp;nbsp;paperColor[0] = 255;
&lt;br&gt;- &amp;nbsp;paperColor[1] = 255;
&lt;br&gt;- &amp;nbsp;paperColor[2] = 255;
&lt;br&gt;- &amp;nbsp;splashOut = new SplashOutputDev(mono ? splashModeMono1 :
&lt;br&gt;+ &amp;nbsp;// CairoOutputDev is bound to output file,
&lt;br&gt;+ &amp;nbsp;// initialization for PDF is postponed.
&lt;br&gt;+ &amp;nbsp;if (!pdf) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paperColor[0] = 255;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paperColor[1] = 255;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paperColor[2] = 255;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;splashOut = new SplashOutputDev(mono ? splashModeMono1 :
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp;gray ? splashModeMono8 :
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; splashModeRGB8, 4,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp;gFalse, paperColor);
&lt;br&gt;- &amp;nbsp;splashOut-&amp;gt;startDoc(doc-&amp;gt;getXRef());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;splashOut-&amp;gt;startDoc(doc-&amp;gt;getXRef());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (sz != 0) w = h = sz;
&lt;br&gt;&amp;nbsp; &amp;nbsp;pg_num_len = (int)ceil(log((double)doc-&amp;gt;getNumPages()) / log((double)10));
&lt;br&gt;&amp;nbsp; &amp;nbsp;for (pg = firstPage; pg &amp;lt;= lastPage; ++pg) {
&lt;br&gt;@@ -310,16 +341,46 @@ int main(int argc, char *argv[]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pg_w = pg_h;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pg_h = tmp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (ppmRoot != NULL) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;snprintf(ppmFile, PPM_FILE_SZ, &amp;quot;%.*s-%0*d.%s&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PPM_FILE_SZ - 32, ppmRoot, pg_num_len, pg,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;png ? &amp;quot;png&amp;quot; : jpeg ? &amp;quot;jpg&amp;quot; : mono ? &amp;quot;pbm&amp;quot; : gray ? &amp;quot;pgm&amp;quot; : &amp;quot;ppm&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;savePageSlice(doc, splashOut, pg, x, y, w, h, pg_w, pg_h, ppmFile);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;savePageSlice(doc, splashOut, pg, x, y, w, h, pg_w, pg_h, NULL);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pdf ? &amp;quot;pdf&amp;quot; : png ? &amp;quot;png&amp;quot; : jpeg ? &amp;quot;jpg&amp;quot; : mono ? &amp;quot;pbm&amp;quot; : gray ? &amp;quot;pgm&amp;quot; : &amp;quot;ppm&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (pdf) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;// postponed initialization for cairo output device
&lt;br&gt;+#ifdef MODIFY_RESOLUTION_IN_PDF2CAIRO
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;surface = cairo_pdf_surface_create( ppmFile, w, h );
&lt;br&gt;+#else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;surface = cairo_pdf_surface_create( ppmFile,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;72 * w / x_resolution,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;72 * h / y_resolution );
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cr = cairo_create( surface );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairo_surface_destroy( surface );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairoOut = new CairoOutputDev;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairoOut-&amp;gt;setCairo( cr );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairo_destroy( cr );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairoOut-&amp;gt;startDoc( doc-&amp;gt;getXRef(), doc-&amp;gt;getCatalog() );
&lt;br&gt;+#ifdef MODIFY_RESOLUTION_IN_PDF2CAIRO
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;savePageSliceCairo(doc, cairoOut, pg, x, y, w, h, pg_w, pg_h);
&lt;br&gt;+#else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;savePageSliceCairo(doc, cairoOut, pg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 72 * x / x_resolution,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 72 * y / y_resolution,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 72 * w / x_resolution,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 72 * h / y_resolution,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pg_w, pg_h);
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cairoOut-&amp;gt;setCairo( NULL );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;delete cairoOut;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;savePageSlice(doc, splashOut, pg, x, y, w, h, pg_w, pg_h, ppmFile);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;delete splashOut;
&lt;br&gt;+ &amp;nbsp;if (!pdf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete splashOut;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;exitCode = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788465&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Trying-to-extend-pdftoppm-to-use-CairoOutputDev-tp26788465p26788465.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26787250</id>
	<title>Branch 'cpp-frontend' - cpp/poppler-global.cpp cpp/poppler-private.cpp</title>
	<published>2009-12-14T15:55:55Z</published>
	<updated>2009-12-14T15:55:55Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;cpp/poppler-global.cpp &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;cpp/poppler-private.cpp | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;2 files changed, 2 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit ca1d2ec4588b2437b58b4448ae2fc5ebd0f130d3
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787250&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 15 00:54:29 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] fix the reference to the vector data
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
&lt;br&gt;index cc52b55..424f947 100644
&lt;br&gt;--- a/cpp/poppler-global.cpp
&lt;br&gt;+++ b/cpp/poppler-global.cpp
&lt;br&gt;@@ -161,7 +161,7 @@ std::ostream&amp; poppler::operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const byte_array &amp;array)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;[&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const std::ios_base::fmtflags f = stream.flags();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::hex(stream);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;const char *data = array.data();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const char *data = &amp;array[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const byte_array::size_type out_len = std::min&amp;lt;byte_array::size_type&amp;gt;(array.size(), 50);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (byte_array::size_type i = 0; i &amp;lt; out_len; ++i)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;diff --git a/cpp/poppler-private.cpp b/cpp/poppler-private.cpp
&lt;br&gt;index 6ab3b6c..1ba3433 100644
&lt;br&gt;--- a/cpp/poppler-private.cpp
&lt;br&gt;+++ b/cpp/poppler-private.cpp
&lt;br&gt;@@ -64,6 +64,6 @@ ustring detail::unicode_to_ustring(const Unicode *u, int length)
&lt;br&gt;&amp;nbsp;GooString* detail::ustring_to_unicode_GooString(const ustring &amp;str)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const byte_array utf8_data = str.to_utf_8();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GooString *goo = new GooString(utf8_data.data());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString *goo = new GooString(&amp;utf8_data[0]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return goo;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787250&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27cpp-frontend%27---cpp-poppler-global.cpp-cpp-poppler-private.cpp-tp26787250p26787250.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26787038</id>
	<title>Branch 'cpp-frontend' - cpp/poppler-document.cpp</title>
	<published>2009-12-14T15:37:41Z</published>
	<updated>2009-12-14T15:37:41Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;cpp/poppler-document.cpp | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 file changed, 1 insertion(+), 1 deletion(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 16c946e7658b0e9cff701ce1d6bbf7d3828cbe08
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787038&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 15 00:35:25 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] fix the reference to the vector data
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;index 0ff526f..ab3939b 100644
&lt;br&gt;--- a/cpp/poppler-document.cpp
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -58,7 +58,7 @@ document_private::document_private(byte_array *file_data,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj.initNull();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;file_data-&amp;gt;swap(doc_data);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;MemStream *memstr = new MemStream(doc_data.data(), 0, doc_data.size(), &amp;obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MemStream *memstr = new MemStream(&amp;doc_data[0], 0, doc_data.size(), &amp;obj);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GooString goo_owner_password(owner_password.c_str());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GooString goo_user_password(user_password.c_str());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;doc = new PDFDoc(memstr, &amp;goo_owner_password, &amp;goo_user_password);
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787038&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27cpp-frontend%27---cpp-poppler-document.cpp-tp26787038p26787038.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26786508</id>
	<title>Branch 'cpp-frontend' - 11 commits - cpp/CMakeLists.txt cpp/Makefile.am cpp/poppler-document.cpp cpp/poppler-document.h cpp/poppler-document-private.h cpp/poppler-embedded-file.cpp cpp/poppler-embedded-file.h cpp/poppler-global.cpp cpp/poppler-global.h cpp/poppler-private.cpp cpp/poppler-rectangle.cpp cpp/poppler-rectangle.h cpp/poppler-version.cpp</title>
	<published>2009-12-14T14:57:43Z</published>
	<updated>2009-12-14T14:57:43Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;cpp/CMakeLists.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 
&lt;br&gt;&amp;nbsp;cpp/Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 
&lt;br&gt;&amp;nbsp;cpp/poppler-document-private.h | &amp;nbsp; &amp;nbsp;5 ++
&lt;br&gt;&amp;nbsp;cpp/poppler-document.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 77 ++++++++++++++++++++++++++++++++++++++++-
&lt;br&gt;&amp;nbsp;cpp/poppler-document.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 11 ++++-
&lt;br&gt;&amp;nbsp;cpp/poppler-embedded-file.cpp &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 +--
&lt;br&gt;&amp;nbsp;cpp/poppler-embedded-file.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 -
&lt;br&gt;&amp;nbsp;cpp/poppler-global.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 37 ++++++++++++++-----
&lt;br&gt;&amp;nbsp;cpp/poppler-global.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 +++++-
&lt;br&gt;&amp;nbsp;cpp/poppler-private.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;cpp/poppler-rectangle.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 35 ++++++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-rectangle.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +++-
&lt;br&gt;&amp;nbsp;cpp/poppler-version.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 ++--
&lt;br&gt;&amp;nbsp;13 files changed, 182 insertions(+), 26 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 9bb90c99b65e0e9d9b65c7dbeb5b4d66377ceb21
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:43:12 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add destructor for 'rectangle'
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-rectangle.h b/cpp/poppler-rectangle.h
&lt;br&gt;index a2b7c10..18674b2 100644
&lt;br&gt;--- a/cpp/poppler-rectangle.h
&lt;br&gt;+++ b/cpp/poppler-rectangle.h
&lt;br&gt;@@ -33,7 +33,8 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;rectangle(T _x, T _y, T w, T h)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: x1(_x), y1(_y), x2(x1 + w), y2(y1 + h)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;~rectangle();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~rectangle()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_empty() const
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ return (x1 == x2) &amp;&amp; (y1 == y2); }
&lt;br&gt;commit 61ccdc9ab3b816174896fcae0899ff34f11eee80
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:40:51 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add out stream operators for rect and rectf
&lt;br&gt;&lt;br&gt;diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
&lt;br&gt;index 3f8e9d9..0a0c6f0 100644
&lt;br&gt;--- a/cpp/CMakeLists.txt
&lt;br&gt;+++ b/cpp/CMakeLists.txt
&lt;br&gt;@@ -13,6 +13,7 @@ set(poppler_cpp_SRCS
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-page.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-page-transition.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-private.cpp
&lt;br&gt;+ &amp;nbsp;poppler-rectangle.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-toc.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-version.cpp
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;diff --git a/cpp/Makefile.am b/cpp/Makefile.am
&lt;br&gt;index b6c2d8e..6259770 100644
&lt;br&gt;--- a/cpp/Makefile.am
&lt;br&gt;+++ b/cpp/Makefile.am
&lt;br&gt;@@ -25,6 +25,7 @@ libpoppler_cpp_la_SOURCES =			\
&lt;br&gt;&amp;nbsp;	poppler-page.cpp			\
&lt;br&gt;&amp;nbsp;	poppler-page-transition.cpp		\
&lt;br&gt;&amp;nbsp;	poppler-private.cpp			\
&lt;br&gt;+	poppler-rectangle.cpp			\
&lt;br&gt;&amp;nbsp;	poppler-toc.cpp				\
&lt;br&gt;&amp;nbsp;	poppler-version.cpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/cpp/poppler-rectangle.cpp b/cpp/poppler-rectangle.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..57fd859
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-rectangle.cpp
&lt;br&gt;@@ -0,0 +1,35 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-rectangle.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;iostream&amp;gt;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+std::ostream&amp; poppler::operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const rect &amp;r)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;[&amp;quot; &amp;lt;&amp;lt; r.x() &amp;lt;&amp;lt; &amp;quot;,&amp;quot; &amp;lt;&amp;lt; r.y() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; r.width() &amp;lt;&amp;lt; &amp;quot;+&amp;quot; &amp;lt;&amp;lt; r.height() &amp;lt;&amp;lt; &amp;quot;]&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return stream;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::ostream&amp; poppler::operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const rectf &amp;r)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;[&amp;quot; &amp;lt;&amp;lt; r.x() &amp;lt;&amp;lt; &amp;quot;,&amp;quot; &amp;lt;&amp;lt; r.y() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; r.width() &amp;lt;&amp;lt; &amp;quot;+&amp;quot; &amp;lt;&amp;lt; r.height() &amp;lt;&amp;lt; &amp;quot;]&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return stream;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-rectangle.h b/cpp/poppler-rectangle.h
&lt;br&gt;index 7465edc..a2b7c10 100644
&lt;br&gt;--- a/cpp/poppler-rectangle.h
&lt;br&gt;+++ b/cpp/poppler-rectangle.h
&lt;br&gt;@@ -19,6 +19,8 @@
&lt;br&gt;&amp;nbsp;#ifndef POPPLER_RECTANGLE_H
&lt;br&gt;&amp;nbsp;#define POPPLER_RECTANGLE_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;namespace poppler
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -55,6 +57,9 @@ private:
&lt;br&gt;&amp;nbsp;typedef rectangle&amp;lt;int&amp;gt; rect;
&lt;br&gt;&amp;nbsp;typedef rectangle&amp;lt;double&amp;gt; rectf;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+POPPLER_CPP_EXPORT std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const rect &amp;r);
&lt;br&gt;+POPPLER_CPP_EXPORT std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const rectf &amp;r);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;commit 69dd51fed3de41f8b799b811ae5ee59c0d5f59c2
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 22:24:07 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add namespace to namespace functiond to link properly
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
&lt;br&gt;index 9ce7641..cc52b55 100644
&lt;br&gt;--- a/cpp/poppler-global.cpp
&lt;br&gt;+++ b/cpp/poppler-global.cpp
&lt;br&gt;@@ -133,7 +133,7 @@ ustring ustring::from_latin1(const std::string &amp;str)
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-unsigned int convert_date(const std::string &amp;date)
&lt;br&gt;+unsigned int poppler::convert_date(const std::string &amp;date)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int year, mon, day, hour, min, sec, tzHours, tzMins;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;char tz;
&lt;br&gt;@@ -156,7 +156,7 @@ unsigned int convert_date(const std::string &amp;date)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return mktime(&amp;time);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const byte_array &amp;array)
&lt;br&gt;+std::ostream&amp; poppler::operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const byte_array &amp;array)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;[&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const std::ios_base::fmtflags f = stream.flags();
&lt;br&gt;diff --git a/cpp/poppler-version.cpp b/cpp/poppler-version.cpp
&lt;br&gt;index 89f95a3..b39af53 100644
&lt;br&gt;--- a/cpp/poppler-version.cpp
&lt;br&gt;+++ b/cpp/poppler-version.cpp
&lt;br&gt;@@ -20,22 +20,22 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;using namespace poppler;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-std::string version_string()
&lt;br&gt;+std::string poppler::version_string()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return std::string(POPPLER_VERSION);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-unsigned int version_major()
&lt;br&gt;+unsigned int poppler::version_major()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MAJOR;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-unsigned int version_minor()
&lt;br&gt;+unsigned int poppler::version_minor()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MINOR;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-unsigned int version_micro()
&lt;br&gt;+unsigned int poppler::version_micro()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MICRO;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;commit 3923fa4890984d8616d86016f4f4a94e8ef3e992
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 22:23:15 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add default empty parameters for the passwords of the document loading functions
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;index ab6eb27..5d394bb 100644
&lt;br&gt;--- a/cpp/poppler-document.h
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -81,11 +81,11 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::vector&amp;lt;embedded_file *&amp;gt; embedded_files() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static document* load_from_file(const std::string &amp;file_name,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password = std::string(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password = std::string());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static document* load_from_data(byte_array *file_data,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password = std::string(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password = std::string());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;document(document_private &amp;dd);
&lt;br&gt;commit 1d23cc677e9b0a9f61c53e0ea365537f33abe5bf
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 21:44:56 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add &amp;quot;human friendly&amp;quot; output representation for byte_array
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
&lt;br&gt;index cc15bce..9ce7641 100644
&lt;br&gt;--- a/cpp/poppler-global.cpp
&lt;br&gt;+++ b/cpp/poppler-global.cpp
&lt;br&gt;@@ -22,6 +22,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;ctime&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;cstring&amp;gt;
&lt;br&gt;+#include &amp;lt;iostream&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;using namespace poppler;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -154,3 +155,25 @@ unsigned int convert_date(const std::string &amp;date)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;time.tm_isdst = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return mktime(&amp;time);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const byte_array &amp;array)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;[&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const std::ios_base::fmtflags f = stream.flags();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::hex(stream);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const char *data = array.data();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const byte_array::size_type out_len = std::min&amp;lt;byte_array::size_type&amp;gt;(array.size(), 50);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (byte_array::size_type i = 0; i &amp;lt; out_len; ++i)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (i != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot; &amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; ((data[i] &amp; 0xf0) &amp;gt;&amp;gt; 4) &amp;lt;&amp;lt; (data[i] &amp; 0xf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream.flags(f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (out_len &amp;lt; array.size()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot; ...&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream &amp;lt;&amp;lt; &amp;quot;]&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return stream;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
&lt;br&gt;index da7c295..4b08e8d 100644
&lt;br&gt;--- a/cpp/poppler-global.h
&lt;br&gt;+++ b/cpp/poppler-global.h
&lt;br&gt;@@ -33,6 +33,7 @@
&lt;br&gt;&amp;nbsp;# &amp;nbsp;define POPPLER_CPP_EXPORT LIB_IMPORT
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;lt;iosfwd&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;string&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;vector&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -88,6 +89,8 @@ private:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;POPPLER_CPP_EXPORT unsigned int /*time_t*/ convert_date(const std::string &amp;date);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+POPPLER_CPP_EXPORT std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; stream, const byte_array &amp;array);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;commit a337c1d757d52c1c238229d2f0cd3a41694b0e08
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 16:18:22 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add document metadata reading
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;index ab14bf9..0ff526f 100644
&lt;br&gt;--- a/cpp/poppler-document.cpp
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -294,6 +294,15 @@ bool document::has_permission(permission_enum which) const
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ustring document::metadata() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::auto_ptr&amp;lt;GooString&amp;gt; md(d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;readMetadata());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (md.get()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return detail::unicode_GooString_to_ustring(md.get());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;int document::pages() const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;getNumPages();
&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;index 66abe87..ab6eb27 100644
&lt;br&gt;--- a/cpp/poppler-document.h
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -66,6 +66,7 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_encrypted() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_linearized() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool has_permission(permission_enum which) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring metadata() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pages() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;page* create_page(const ustring &amp;label) const;
&lt;br&gt;commit c9cb6353ad5279d09615eb2c944b2b053cdf5ccc
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 15:52:25 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add function to query for document &amp;quot;permissions&amp;quot;
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;index 908d4d2..ab14bf9 100644
&lt;br&gt;--- a/cpp/poppler-document.cpp
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -271,6 +271,29 @@ bool document::is_linearized() const
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;isLinearized();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool document::has_permission(permission_enum which) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (which) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_print:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToPrint();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_change:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToChange();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_copy:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToCopy();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_add_notes:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToAddNotes();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_fill_forms:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToFillForm();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_accessibility:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToAccessibility();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_assemble:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToAssemble();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case perm_print_high_resolution:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;okToPrintHighRes();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;int document::pages() const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;getNumPages();
&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;index cc3c10d..66abe87 100644
&lt;br&gt;--- a/cpp/poppler-document.h
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -65,6 +65,7 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ info_date(const std::string &amp;key) const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_encrypted() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_linearized() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool has_permission(permission_enum which) const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pages() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;page* create_page(const ustring &amp;label) const;
&lt;br&gt;diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
&lt;br&gt;index a6a9146..da7c295 100644
&lt;br&gt;--- a/cpp/poppler-global.h
&lt;br&gt;+++ b/cpp/poppler-global.h
&lt;br&gt;@@ -60,6 +60,10 @@ enum rotation_enum { rotate_0, rotate_90, rotate_180, rotate_270 };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;enum page_box_enum { media_box, crop_box, bleed_box, trim_box, art_box };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+enum permission_enum { perm_print, perm_change, perm_copy, perm_add_notes,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; perm_fill_forms, perm_accessibility, perm_assemble,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; perm_print_high_resolution };
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;typedef std::vector&amp;lt;char&amp;gt; byte_array;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class POPPLER_CPP_EXPORT ustring : public std::basic_string&amp;lt;unsigned short&amp;gt;
&lt;br&gt;commit 30e90c7c1b41c62ddc21905e7ccdea4c95547e80
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 15:33:36 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add is_encrypted and is_linearized for document
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;index d1bc026..908d4d2 100644
&lt;br&gt;--- a/cpp/poppler-document.cpp
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -261,6 +261,16 @@ unsigned int document::info_date(const std::string &amp;key) const
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool document::is_encrypted() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;isEncrypted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool document::is_linearized() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;isLinearized();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;int document::pages() const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;getNumPages();
&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;index 213a81a..cc3c10d 100644
&lt;br&gt;--- a/cpp/poppler-document.h
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -63,6 +63,8 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::vector&amp;lt;std::string&amp;gt; info_keys() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ustring info_key(const std::string &amp;key) const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ info_date(const std::string &amp;key) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_encrypted() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_linearized() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pages() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;page* create_page(const ustring &amp;label) const;
&lt;br&gt;commit 93fd588c519958a1f66231c111ea8a6b0a759be1
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 13:19:24 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add the possibility to load a document from raw data
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-document-private.h b/cpp/poppler-document-private.h
&lt;br&gt;index 52ed935..9820603 100644
&lt;br&gt;--- a/cpp/poppler-document-private.h
&lt;br&gt;+++ b/cpp/poppler-document-private.h
&lt;br&gt;@@ -19,6 +19,8 @@
&lt;br&gt;&amp;nbsp;#ifndef POPPLER_DOCUMENT_PRIVATE_H
&lt;br&gt;&amp;nbsp;#define POPPLER_DOCUMENT_PRIVATE_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#include &amp;quot;poppler-config.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;GooString.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;PDFDoc.h&amp;quot;
&lt;br&gt;@@ -36,11 +38,14 @@ class document_private
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;document_private(GooString *file_path, const std::string &amp;owner_password,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private(byte_array *file_data, const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;~document_private();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static document* check_document(document_private *doc);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;PDFDoc *doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;byte_array doc_data;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bool is_locked;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::vector&amp;lt;embedded_file *&amp;gt; embedded_files;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;index 46f52b9..d1bc026 100644
&lt;br&gt;--- a/cpp/poppler-document.cpp
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -49,6 +49,22 @@ document_private::document_private(GooString *file_path, const std::string &amp;owne
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;init();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+document_private::document_private(byte_array *file_data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: doc(0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;, is_locked(false)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;obj.initNull();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;file_data-&amp;gt;swap(doc_data);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MemStream *memstr = new MemStream(doc_data.data(), 0, doc_data.size(), &amp;obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString goo_owner_password(owner_password.c_str());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString goo_user_password(user_password.c_str());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;doc = new PDFDoc(memstr, &amp;goo_owner_password, &amp;goo_user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;init();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;document_private::~document_private()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;delete_all(embedded_files);
&lt;br&gt;@@ -106,11 +122,15 @@ bool document::unlock(const std::string &amp;owner_password, const std::string &amp;user
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document_private *newdoc = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (d-&amp;gt;doc_data.size() &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdoc = new document_private(&amp;d-&amp;gt;doc_data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner_password, user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdoc = new document_private(new GooString(d-&amp;gt;doc-&amp;gt;getFileName()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner_password, user_password);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!newdoc-&amp;gt;doc-&amp;gt;isOk()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d-&amp;gt;doc_data.swap(newdoc-&amp;gt;doc_data);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete newdoc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;@@ -314,3 +334,16 @@ document* document::load_from_file(const std::string &amp;file_name,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner_password, user_password);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return document_private::check_document(doc);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+document* document::load_from_data(byte_array *file_data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!file_data || file_data-&amp;gt;size() &amp;lt; 10) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private *doc = new document_private(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file_data, owner_password, user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return document_private::check_document(doc);
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;index 7ff4337..213a81a 100644
&lt;br&gt;--- a/cpp/poppler-document.h
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -79,6 +79,9 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static document* load_from_file(const std::string &amp;file_name,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static document* load_from_data(byte_array *file_data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;document(document_private &amp;dd);
&lt;br&gt;commit 53996365b159cf84adf2cac56c76b8bda8dfb12e
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 12:57:41 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] use the byte_array typedef
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-embedded-file.cpp b/cpp/poppler-embedded-file.cpp
&lt;br&gt;index 487b32d..6dfe321 100644
&lt;br&gt;--- a/cpp/poppler-embedded-file.cpp
&lt;br&gt;+++ b/cpp/poppler-embedded-file.cpp
&lt;br&gt;@@ -93,15 +93,15 @@ std::string embedded_file::mime_type() const
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return std::string(d-&amp;gt;emb_file-&amp;gt;mimeType()-&amp;gt;getCString());
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-std::vector&amp;lt;char&amp;gt; embedded_file::data() const
&lt;br&gt;+byte_array embedded_file::data() const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_valid()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;char&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return byte_array();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Stream *stream = d-&amp;gt;emb_file-&amp;gt;streamObject().getStream();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;stream-&amp;gt;reset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;std::vector&amp;lt;char&amp;gt; ret(1024);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;byte_array ret(1024);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;size_t data_len = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int i;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;while ((i = stream-&amp;gt;getChar()) != EOF) {
&lt;br&gt;diff --git a/cpp/poppler-embedded-file.h b/cpp/poppler-embedded-file.h
&lt;br&gt;index 250b84a..04ad7be 100644
&lt;br&gt;--- a/cpp/poppler-embedded-file.h
&lt;br&gt;+++ b/cpp/poppler-embedded-file.h
&lt;br&gt;@@ -41,7 +41,7 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ creation_date() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::string checksum() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::string mime_type() const;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;std::vector&amp;lt;char&amp;gt; data() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;byte_array data() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;embedded_file(embedded_file_private &amp;dd);
&lt;br&gt;commit cfb4f5dfabf31de22d68aa0d5796cb7a33d8b462
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 11:06:36 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add a byte_array typedef, and use it for utf8 string data
&lt;br&gt;&lt;br&gt;diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
&lt;br&gt;index ce27061..cc15bce 100644
&lt;br&gt;--- a/cpp/poppler-global.cpp
&lt;br&gt;+++ b/cpp/poppler-global.cpp
&lt;br&gt;@@ -47,27 +47,21 @@ ustring::~ustring()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-char* ustring::to_utf_8(int *length) const
&lt;br&gt;+byte_array ustring::to_utf_8() const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (!size()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*length = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return byte_array();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const value_type *me = data();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const size_t len = size() * 2 + 2;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;char *str = new char[len];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;byte_array str(len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;str[0] = 0xfe;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;str[1] = 0xff;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (size_t i = 0; i &amp;lt; size(); ++i, ++me) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str[i * 2 + 2] = (*me &amp; 0xff);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str[i * 2 + 3] = ((*me &amp;gt;&amp;gt; 8) &amp; 0xff);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*length = len;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return str;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
&lt;br&gt;index e51878c..a6a9146 100644
&lt;br&gt;--- a/cpp/poppler-global.h
&lt;br&gt;+++ b/cpp/poppler-global.h
&lt;br&gt;@@ -34,6 +34,7 @@
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;string&amp;gt;
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;namespace poppler
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -59,6 +60,8 @@ enum rotation_enum { rotate_0, rotate_90, rotate_180, rotate_270 };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;enum page_box_enum { media_box, crop_box, bleed_box, trim_box, art_box };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+typedef std::vector&amp;lt;char&amp;gt; byte_array;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class POPPLER_CPP_EXPORT ustring : public std::basic_string&amp;lt;unsigned short&amp;gt;
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;@@ -66,7 +69,7 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ustring(size_type len, value_type ch);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;~ustring();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;char* to_utf_8(int *length = 0) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;byte_array to_utf_8() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;std::string to_latin1() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static ustring from_utf_8(const char *str, int len = -1);
&lt;br&gt;diff --git a/cpp/poppler-private.cpp b/cpp/poppler-private.cpp
&lt;br&gt;index 16ba370..6ab3b6c 100644
&lt;br&gt;--- a/cpp/poppler-private.cpp
&lt;br&gt;+++ b/cpp/poppler-private.cpp
&lt;br&gt;@@ -63,8 +63,7 @@ ustring detail::unicode_to_ustring(const Unicode *u, int length)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;GooString* detail::ustring_to_unicode_GooString(const ustring &amp;str)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;char *u = str.to_utf_8();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GooString *goo = new GooString(u);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;delete [] u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const byte_array utf8_data = str.to_utf_8();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString *goo = new GooString(utf8_data.data());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return goo;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26786508&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27cpp-frontend%27---11-commits---cpp-CMakeLists.txt-cpp-Makefile.am-cpp-poppler-document.cpp-cpp-poppler-document.h-cpp-poppler-document-private.h-cpp-poppler-embedded-file.cpp-cpp-poppler-embedded-file.h-cpp-poppler-global.cpp-cpp-poppler-global.h-cpp-poppler-private.cpp-cpp-poppler-rectangle.cpp-cpp-poppler-rectangle.h-cpp-poppler-version.cpp-tp26786508p26786508.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26771855</id>
	<title>Branch 'cpp-frontend' - 2 commits - configure.ac cpp/CMakeLists.txt cpp/.gitignore cpp/Makefile.am cpp/poppler-version.cpp cpp/poppler-version.h.in .gitignore</title>
	<published>2009-12-13T17:30:42Z</published>
	<updated>2009-12-13T17:30:42Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;.gitignore &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;configure.ac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;cpp/.gitignore &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;cpp/CMakeLists.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +++++
&lt;br&gt;&amp;nbsp;cpp/Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 ++++--
&lt;br&gt;&amp;nbsp;cpp/poppler-version.cpp &amp;nbsp;| &amp;nbsp; 41 +++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-version.h.in | &amp;nbsp; 39 +++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;7 files changed, 93 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 2d13ac31671b2007e44a90f45a82cb3adfa9c80c
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771855&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 02:30:06 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; update ignore files
&lt;br&gt;&lt;br&gt;diff --git a/.gitignore b/.gitignore
&lt;br&gt;index 11d96b9..d000352 100644
&lt;br&gt;--- a/.gitignore
&lt;br&gt;+++ b/.gitignore
&lt;br&gt;@@ -16,6 +16,7 @@ libtool
&lt;br&gt;&amp;nbsp;ltmain.sh
&lt;br&gt;&amp;nbsp;missing
&lt;br&gt;&amp;nbsp;poppler-cairo.pc
&lt;br&gt;+poppler-cpp.pc
&lt;br&gt;&amp;nbsp;poppler-glib.pc
&lt;br&gt;&amp;nbsp;poppler-qt.pc
&lt;br&gt;&amp;nbsp;poppler-qt4.pc
&lt;br&gt;diff --git a/cpp/.gitignore b/cpp/.gitignore
&lt;br&gt;index 62535c7..0556b92 100644
&lt;br&gt;--- a/cpp/.gitignore
&lt;br&gt;+++ b/cpp/.gitignore
&lt;br&gt;@@ -4,3 +4,4 @@
&lt;br&gt;&amp;nbsp;*.lo
&lt;br&gt;&amp;nbsp;Makefile
&lt;br&gt;&amp;nbsp;Makefile.in
&lt;br&gt;+poppler-version.h
&lt;br&gt;commit 01e902e40ca15acf0319e37d39a271d6875bfce9
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771855&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 02:02:47 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add a version header+functions
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; this way, it is possible to get (either at build time and at runtime)
&lt;br&gt;&amp;nbsp; &amp;nbsp; the version of the current poppler-cpp library
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; poppler-config.h is generated by the build system (autotools or cmake)
&lt;br&gt;&amp;nbsp; &amp;nbsp; with the correct version information
&lt;br&gt;&lt;br&gt;diff --git a/configure.ac b/configure.ac
&lt;br&gt;index a7d61f7..70bac6c 100644
&lt;br&gt;--- a/configure.ac
&lt;br&gt;+++ b/configure.ac
&lt;br&gt;@@ -547,6 +547,7 @@ AC_SUBST(PC_REQUIRES_PRIVATE)
&lt;br&gt;&amp;nbsp;AC_SUBST([POPPLER_MAJOR_VERSION],[poppler_version_major])
&lt;br&gt;&amp;nbsp;AC_SUBST([POPPLER_MINOR_VERSION],[poppler_version_minor])
&lt;br&gt;&amp;nbsp;AC_SUBST([POPPLER_MICRO_VERSION],[poppler_version_micro])
&lt;br&gt;+AC_SUBST([POPPLER_VERSION],[poppler_version])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AC_OUTPUT([
&lt;br&gt;&amp;nbsp;Makefile
&lt;br&gt;@@ -566,6 +567,7 @@ qt4/src/Makefile
&lt;br&gt;&amp;nbsp;qt4/tests/Makefile
&lt;br&gt;&amp;nbsp;qt4/demos/Makefile
&lt;br&gt;&amp;nbsp;cpp/Makefile
&lt;br&gt;+cpp/poppler-version.h
&lt;br&gt;&amp;nbsp;poppler.pc
&lt;br&gt;&amp;nbsp;poppler-cairo.pc
&lt;br&gt;&amp;nbsp;poppler-splash.pc
&lt;br&gt;diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
&lt;br&gt;index 42fbca2..3f8e9d9 100644
&lt;br&gt;--- a/cpp/CMakeLists.txt
&lt;br&gt;+++ b/cpp/CMakeLists.txt
&lt;br&gt;@@ -1,7 +1,10 @@
&lt;br&gt;&amp;nbsp;include_directories(
&lt;br&gt;+ &amp;nbsp;${CMAKE_CURRENT_SOURCE_DIR}
&lt;br&gt;&amp;nbsp; &amp;nbsp;${CMAKE_CURRENT_BINARY_DIR}
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+configure_file(poppler-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h @ONLY)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;set(poppler_cpp_SRCS
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-document.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-embedded-file.cpp
&lt;br&gt;@@ -11,6 +14,7 @@ set(poppler_cpp_SRCS
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-page-transition.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-private.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-toc.cpp
&lt;br&gt;+ &amp;nbsp;poppler-version.cpp
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;add_library(poppler-cpp SHARED ${poppler_cpp_SRCS})
&lt;br&gt;@@ -30,5 +34,6 @@ install(FILES
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-page-transition.h
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-rectangle.h
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler-toc.h
&lt;br&gt;+ &amp;nbsp;${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h
&lt;br&gt;&amp;nbsp; &amp;nbsp;DESTINATION include/poppler/cpp)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/cpp/Makefile.am b/cpp/Makefile.am
&lt;br&gt;index 58b8dd1..b6c2d8e 100644
&lt;br&gt;--- a/cpp/Makefile.am
&lt;br&gt;+++ b/cpp/Makefile.am
&lt;br&gt;@@ -13,7 +13,8 @@ poppler_include_HEADERS =			\
&lt;br&gt;&amp;nbsp;	poppler-page.h				\
&lt;br&gt;&amp;nbsp;	poppler-page-transition.h		\
&lt;br&gt;&amp;nbsp;	poppler-rectangle.h			\
&lt;br&gt;-	poppler-toc.h
&lt;br&gt;+	poppler-toc.h				\
&lt;br&gt;+	poppler-version.h
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;lib_LTLIBRARIES = libpoppler-cpp.la
&lt;br&gt;&amp;nbsp;libpoppler_cpp_la_SOURCES =			\
&lt;br&gt;@@ -24,7 +25,8 @@ libpoppler_cpp_la_SOURCES =			\
&lt;br&gt;&amp;nbsp;	poppler-page.cpp			\
&lt;br&gt;&amp;nbsp;	poppler-page-transition.cpp		\
&lt;br&gt;&amp;nbsp;	poppler-private.cpp			\
&lt;br&gt;-	poppler-toc.cpp
&lt;br&gt;+	poppler-toc.cpp				\
&lt;br&gt;+	poppler-version.cpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;libpoppler_cpp_la_LIBADD = 			\
&lt;br&gt;&amp;nbsp;	$(top_builddir)/poppler/libpoppler.la
&lt;br&gt;diff --git a/cpp/poppler-version.cpp b/cpp/poppler-version.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..89f95a3
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-version.cpp
&lt;br&gt;@@ -0,0 +1,41 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771855&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-version.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+std::string version_string()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return std::string(POPPLER_VERSION);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int version_major()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MAJOR;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int version_minor()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MINOR;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int version_micro()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return POPPLER_VERSION_MICRO;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-version.h.in b/cpp/poppler-version.h.in
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..cf6bce6
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-version.h.in
&lt;br&gt;@@ -0,0 +1,39 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771855&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_VERSION_H
&lt;br&gt;+#define POPPLER_VERSION_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#define POPPLER_VERSION &amp;quot;@POPPLER_VERSION@&amp;quot;
&lt;br&gt;+#define POPPLER_VERSION_MAJOR @POPPLER_MAJOR_VERSION@
&lt;br&gt;+#define POPPLER_VERSION_MINOR @POPPLER_MINOR_VERSION@
&lt;br&gt;+#define POPPLER_VERSION_MICRO @POPPLER_MICRO_VERSION@
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+POPPLER_CPP_EXPORT std::string version_string();
&lt;br&gt;+POPPLER_CPP_EXPORT unsigned int version_major();
&lt;br&gt;+POPPLER_CPP_EXPORT unsigned int version_minor();
&lt;br&gt;+POPPLER_CPP_EXPORT unsigned int version_micro();
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771855&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27cpp-frontend%27---2-commits---configure.ac-cpp-CMakeLists.txt-cpp-.gitignore-cpp-Makefile.am-cpp-poppler-version.cpp-cpp-poppler-version.h.in-.gitignore-tp26771855p26771855.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26771789</id>
	<title>Re: Testing Re: Multicolumn select</title>
	<published>2009-12-13T17:21:54Z</published>
	<updated>2009-12-13T17:21:54Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/12/12 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; A Dimecres 09 Desembre 2009 23:22:09, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; 2009/12/9 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; A Dimecres 09 Desembre 2009 14:51:59, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 2009/12/8 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; What we want is something that makes text extraction/selection better,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; the definition of better is the problem here :D
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ok. So it sounds like it would be worth adding tests in, so we can be
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; explicit about what we want text extraction to do.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I could do this in two ways:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; - write a test harness that calls the apis directly (following the
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; example of cairo). This has the advantage that more apis could be
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; tested later, but complicates writing the tests; and in any case most
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; other tests will be about rendering not text extraction. Since this
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; would be a unit test, its also fragile to API changes.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; - extend pdftotext to allow me to specify start and end points for
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; text extraction (page,x,y). This would make writing tests easy - just
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; simple shell scripts along the lines of the git test suite. This
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; feature could be useful to end users too, I guess.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I like the second plan better, since it supports building ad-hoc tests
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; with pdfs attached to bugs. Since we already have -f and -l, (and -x,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; -y do something unrelated to the selection) I'm thinking of int args
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; -fx, -fy, -lx, -ly, which default to (0,0) (pageWidth, pageHeight).
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Why isn't x,y,W,H enough? AFAIR they define which area gets extracted.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Its not the same area. That mechanism crops every page from start to
&lt;br&gt;&amp;gt;&amp;gt; finish to the same x,y,W,H box before dumping the text. Its useful for
&lt;br&gt;&amp;gt;&amp;gt; removing header/footer sections in a whole-document dump. It also
&lt;br&gt;&amp;gt;&amp;gt; doesn't hit the text selection code at all.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm lost now, you originally said pdftotext was using your new code and now
&lt;br&gt;&amp;gt; you say it doesn't?
&lt;/div&gt;&lt;br&gt;I am talking about how pdftotext works, whether or not you have my changes.
&lt;br&gt;&lt;br&gt;pdftotext does not use xyWH for *selection* (the way it would work in
&lt;br&gt;evince) it uses it to *crop*.
&lt;br&gt;&lt;br&gt;However the text that it does ouput is in the same order as it would
&lt;br&gt;be if you selected *all the text on the cropped page*.
&lt;br&gt;&lt;br&gt;Ok it was misleading to say 'It also doesn't hit the text selection
&lt;br&gt;code at all' I should have said 'it never passes text selection
&lt;br&gt;coordinates other than those that would select *everything*'. So it
&lt;br&gt;tests reading order but not the selection points in any meaningful
&lt;br&gt;way.
&lt;br&gt;&lt;br&gt;Does this make it clearer?
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Albert
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; By contrast, a reading-order selection, even on a single page, may
&lt;br&gt;&amp;gt;&amp;gt; include text that lies outside the rectangle from the startpoint to
&lt;br&gt;&amp;gt;&amp;gt; the endpoint. Also, the xyWH mechanism applies the start/end points to
&lt;br&gt;&amp;gt;&amp;gt; every page, instead of only the start/end page as you would with a
&lt;br&gt;&amp;gt;&amp;gt; selection.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Albert
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Does this sound useful to you?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; _______________________________________________
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; poppler mailing list
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771789&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Testing-Re%3A--Multicolumn-select-tp26711477p26771789.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26771144</id>
	<title>7 commits - cmake/modules config.h.cmake ConfigureChecks.cmake</title>
	<published>2009-12-13T15:58:19Z</published>
	<updated>2009-12-13T15:58:19Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;ConfigureChecks.cmake &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 ++++
&lt;br&gt;&amp;nbsp;cmake/modules/FindCairo.cmake | &amp;nbsp; 18 ++++++++++++++++++
&lt;br&gt;&amp;nbsp;config.h.cmake &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 36 +++++++++++++++++++++++++++++-------
&lt;br&gt;&amp;nbsp;3 files changed, 51 insertions(+), 7 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit b3f5e5d60bc9109da961940f6216722f9db4a87b
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:56:15 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] add the configure check for the Cairo blend modes support (as in autotools)
&lt;br&gt;&lt;br&gt;diff --git a/cmake/modules/FindCairo.cmake b/cmake/modules/FindCairo.cmake
&lt;br&gt;index a0a8400..ccf8208 100644
&lt;br&gt;--- a/cmake/modules/FindCairo.cmake
&lt;br&gt;+++ b/cmake/modules/FindCairo.cmake
&lt;br&gt;@@ -37,6 +37,24 @@ if (NOT WIN32)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;endif(NOT WIN32)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+if (CAIRO_FOUND)
&lt;br&gt;+ &amp;nbsp;include(MacroPushRequiredVars)
&lt;br&gt;+ &amp;nbsp;include(CheckCSourceCompiles)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;macro_push_required_vars()
&lt;br&gt;+ &amp;nbsp;set(CMAKE_REQUIRED_DEFINITIONS ${CAIRO_CFLAGS})
&lt;br&gt;+ &amp;nbsp;set(CMAKE_REQUIRED_LIBRARIES ${CAIRO_LIBRARIES})
&lt;br&gt;+ &amp;nbsp;check_c_source_compiles(&amp;quot;
&lt;br&gt;+#include &amp;lt;cairo.h&amp;gt;
&lt;br&gt;+int main() {
&lt;br&gt;+ &amp;nbsp;cairo_t *cr;
&lt;br&gt;+ &amp;nbsp;cairo_set_operator(cr, CAIRO_OPERATOR_MULTIPLY);
&lt;br&gt;+ &amp;nbsp;return 0;
&lt;br&gt;+}
&lt;br&gt;+&amp;quot; CAIRO_HAS_BLEND_MODES)
&lt;br&gt;+ &amp;nbsp;macro_pop_required_vars()
&lt;br&gt;+endif (CAIRO_FOUND)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;mark_as_advanced(
&lt;br&gt;&amp;nbsp; &amp;nbsp;CAIRO_CFLAGS
&lt;br&gt;&amp;nbsp; &amp;nbsp;CAIRO_LIBRARIES
&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index 60547ea..7145e6a 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -1,5 +1,8 @@
&lt;br&gt;&amp;nbsp;/* config.h. &amp;nbsp;Generated from config.h.cmake by cmake. &amp;nbsp;*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Whether cairo has blend modes support */
&lt;br&gt;+#cmakedefine CAIRO_HAS_BLEND_MODES 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Use libjpeg instead of builtin jpeg decoder. */
&lt;br&gt;&amp;nbsp;#cmakedefine ENABLE_LIBJPEG 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit f6ba877e0c22538cfe34d32d69814f660de59d2c
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:44:55 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] add configure check for sys/mman.h (as in autotools)
&lt;br&gt;&lt;br&gt;diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
&lt;br&gt;index 04c87af..6049c9a 100644
&lt;br&gt;--- a/ConfigureChecks.cmake
&lt;br&gt;+++ b/ConfigureChecks.cmake
&lt;br&gt;@@ -19,6 +19,7 @@ check_include_files(stdint.h HAVE_STDINT_H)
&lt;br&gt;&amp;nbsp;check_include_files(stdlib.h HAVE_STDLIB_H)
&lt;br&gt;&amp;nbsp;check_include_files(strings.h HAVE_STRINGS_H)
&lt;br&gt;&amp;nbsp;check_include_files(string.h HAVE_STRING_H)
&lt;br&gt;+check_include_files(sys/mman.h HAVE_SYS_MMAN_H)
&lt;br&gt;&amp;nbsp;check_include_files(sys/stat.h HAVE_SYS_STAT_H)
&lt;br&gt;&amp;nbsp;check_include_files(sys/types.h HAVE_SYS_TYPES_H)
&lt;br&gt;&amp;nbsp;check_include_files(unistd.h HAVE_UNISTD_H)
&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index dfd4c69..60547ea 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -85,6 +85,9 @@
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;sys/dir.h&amp;gt; header file, and it defines `DIR'. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_SYS_DIR_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Define to 1 if you have the &amp;lt;sys/mman.h&amp;gt; header file. */
&lt;br&gt;+#cmakedefine HAVE_SYS_MMAN_H 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;sys/ndir.h&amp;gt; header file, and it defines `DIR'. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_SYS_NDIR_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit e12801320ae030628fc62c073983c06b39ee13d7
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:42:20 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; minor spello
&lt;br&gt;&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index 52f8c67..dfd4c69 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -139,7 +139,7 @@
&lt;br&gt;&amp;nbsp;/* Enable word list support. */
&lt;br&gt;&amp;nbsp;#cmakedefine TEXTOUT_WORD_LIST 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Defines if use cms. */
&lt;br&gt;+/* Defines if use cms */
&lt;br&gt;&amp;nbsp;#cmakedefine USE_CMS 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Throw exceptions to deal with not enough memory and similar problems */
&lt;br&gt;commit 6428907ebcf33d4391673aadcfa71c3061f6d352
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:41:49 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] add configure check for fcntl.h (as in autotools)
&lt;br&gt;&lt;br&gt;diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
&lt;br&gt;index 827fa15..04c87af 100644
&lt;br&gt;--- a/ConfigureChecks.cmake
&lt;br&gt;+++ b/ConfigureChecks.cmake
&lt;br&gt;@@ -12,6 +12,7 @@ include(CheckTypeSize)
&lt;br&gt;&amp;nbsp;include(CheckCSourceCompiles)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;check_include_files(dlfcn.h HAVE_DLFCN_H)
&lt;br&gt;+check_include_files(fcntl.h HAVE_FCNTL_H)
&lt;br&gt;&amp;nbsp;check_include_files(inttypes.h HAVE_INTTYPES_H)
&lt;br&gt;&amp;nbsp;check_include_files(memory.h HAVE_MEMORY_H)
&lt;br&gt;&amp;nbsp;check_include_files(stdint.h HAVE_STDINT_H)
&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index 6486d67..52f8c67 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -22,6 +22,9 @@
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;dlfcn.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_DLFCN_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Define to 1 if you have the &amp;lt;fcntl.h&amp;gt; header file. */
&lt;br&gt;+#cmakedefine HAVE_FCNTL_H 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Have FreeType2 include files */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_FREETYPE_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit 916ab7163249e23bd5ba00922fdcad9caaf92c75
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:34:59 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] oops, those should have been '#cmakedefine' and not '#define'
&lt;br&gt;&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index d59e367..6486d67 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -38,7 +38,7 @@
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_GETTIMEOFDAY 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Defines if gmtime_r is available on your system */
&lt;br&gt;-#define HAVE_GMTIME_R 1
&lt;br&gt;+#cmakedefine HAVE_GMTIME_R 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;inttypes.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_INTTYPES_H 1
&lt;br&gt;@@ -47,7 +47,7 @@
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_LIBZ 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Defines if localtime_r is available on your system */
&lt;br&gt;-#define HAVE_LOCALTIME_R 1
&lt;br&gt;+#cmakedefine HAVE_LOCALTIME_R 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;memory.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_MEMORY_H 1
&lt;br&gt;commit ea655d8c7e24e97ee710110a783ed9c209cf76e3
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:33:51 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] move and rename to match more the autotools output
&lt;br&gt;&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index 8945568..d59e367 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -3,19 +3,20 @@
&lt;br&gt;&amp;nbsp;/* Use libjpeg instead of builtin jpeg decoder. */
&lt;br&gt;&amp;nbsp;#cmakedefine ENABLE_LIBJPEG 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Use zlib instead of builtin zlib decoder. */
&lt;br&gt;-#cmakedefine ENABLE_ZLIB 1
&lt;br&gt;+/* Use libopenjpeg instead of builtin jpeg2000 decoder. */
&lt;br&gt;+#cmakedefine ENABLE_LIBOPENJPEG 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Use libpng to export images in pdftohtml. */
&lt;br&gt;+/* Build against libpng. */
&lt;br&gt;&amp;nbsp;#cmakedefine ENABLE_LIBPNG 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Use liblcms for color management. */
&lt;br&gt;-#cmakedefine USE_CMS 1
&lt;br&gt;+/* Use zlib instead of builtin zlib decoder. */
&lt;br&gt;+#cmakedefine ENABLE_ZLIB 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Use cairo for rendering. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_CAIRO 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Define to 1 if you have the &amp;lt;dirent.h&amp;gt; header file, and it defines `DIR'. */
&lt;br&gt;+/* Define to 1 if you have the &amp;lt;dirent.h&amp;gt; header file, and it defines `DIR'.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_DIRENT_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;dlfcn.h&amp;gt; header file. */
&lt;br&gt;@@ -109,7 +110,7 @@
&lt;br&gt;&amp;nbsp;#define PACKAGE &amp;quot;poppler&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to the address where bug reports for this package should be sent. */
&lt;br&gt;-#define PACKAGE_BUGREPORT &amp;quot;&amp;quot;
&lt;br&gt;+#define PACKAGE_BUGREPORT &amp;quot;&lt;a href=&quot;https://bugs.freedesktop.org/enter_bug.cgi?product=poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugs.freedesktop.org/enter_bug.cgi?product=poppler&lt;/a&gt;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to the full name of this package. */
&lt;br&gt;&amp;nbsp;#define PACKAGE_NAME &amp;quot;poppler&amp;quot;
&lt;br&gt;@@ -120,6 +121,9 @@
&lt;br&gt;&amp;nbsp;/* Define to the one symbol short name of this package. */
&lt;br&gt;&amp;nbsp;#define PACKAGE_TARNAME &amp;quot;poppler&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Define to the home page for this package. */
&lt;br&gt;+#define PACKAGE_URL &amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to the version of this package. */
&lt;br&gt;&amp;nbsp;#define PACKAGE_VERSION &amp;quot;${POPPLER_VERSION}&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -132,6 +136,9 @@
&lt;br&gt;&amp;nbsp;/* Enable word list support. */
&lt;br&gt;&amp;nbsp;#cmakedefine TEXTOUT_WORD_LIST 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Defines if use cms. */
&lt;br&gt;+#cmakedefine USE_CMS 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Throw exceptions to deal with not enough memory and similar problems */
&lt;br&gt;&amp;nbsp;#cmakedefine USE_EXCEPTIONS 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit 9f0146c5b2f9326e834104b89791f66b18f85adc
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 00:28:04 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [CMake] add checks for gmtime_r and localtime_r
&lt;br&gt;&lt;br&gt;diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
&lt;br&gt;index 1ba656a..827fa15 100644
&lt;br&gt;--- a/ConfigureChecks.cmake
&lt;br&gt;+++ b/ConfigureChecks.cmake
&lt;br&gt;@@ -25,7 +25,9 @@ check_include_files(unistd.h HAVE_UNISTD_H)
&lt;br&gt;&amp;nbsp;check_function_exists(fseek64 HAVE_FSEEK64)
&lt;br&gt;&amp;nbsp;check_function_exists(fseeko HAVE_FSEEKO)
&lt;br&gt;&amp;nbsp;check_function_exists(ftell64 HAVE_FTELL64)
&lt;br&gt;+check_function_exists(gmtime_r HAVE_GMTIME_R)
&lt;br&gt;&amp;nbsp;check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
&lt;br&gt;+check_function_exists(localtime_r HAVE_LOCALTIME_R)
&lt;br&gt;&amp;nbsp;check_function_exists(popen HAVE_POPEN)
&lt;br&gt;&amp;nbsp;check_function_exists(mkstemp HAVE_MKSTEMP)
&lt;br&gt;&amp;nbsp;check_function_exists(mkstemps HAVE_MKSTEMPS)
&lt;br&gt;diff --git a/config.h.cmake b/config.h.cmake
&lt;br&gt;index 7b57de0..8945568 100644
&lt;br&gt;--- a/config.h.cmake
&lt;br&gt;+++ b/config.h.cmake
&lt;br&gt;@@ -36,12 +36,18 @@
&lt;br&gt;&amp;nbsp;/* Defines if gettimeofday is available on your system */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_GETTIMEOFDAY 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Defines if gmtime_r is available on your system */
&lt;br&gt;+#define HAVE_GMTIME_R 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;inttypes.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_INTTYPES_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the `z' library (-lz). */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_LIBZ 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Defines if localtime_r is available on your system */
&lt;br&gt;+#define HAVE_LOCALTIME_R 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;memory.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#cmakedefine HAVE_MEMORY_H 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26771144&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/7-commits---cmake-modules-config.h.cmake-ConfigureChecks.cmake-tp26771144p26771144.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26770585</id>
	<title>Branch 'cpp-frontend' - 6 commits - CMakeLists.txt configure.ac cpp/CMakeLists.txt cpp/.gitignore cpp/Makefile.am cpp/poppler-document.cpp cpp/poppler-document.h cpp/poppler-document-private.h cpp/poppler-embedded-file.cpp cpp/poppler-embedded-file.h cpp/poppler-embedded-file-private.h cpp/poppler-font.cpp cpp/poppler-font.h cpp/poppler-global.cpp cpp/poppler-global.h cpp/poppler-page.cpp cpp/poppler-page.h cpp/poppler-page-private.h cpp/poppler-page-transition.cpp cpp/poppler-page-transition.h cpp/poppler-private.cpp cpp/poppler-private.h cpp/poppler-rectangle.h cpp/poppler-toc.cpp cpp/poppler-toc.h cpp/poppler-toc-private.h Makefile.am poppler-cpp.pc.cmake poppler-cpp.pc.in</title>
	<published>2009-12-13T14:46:56Z</published>
	<updated>2009-12-13T14:46:56Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">&amp;nbsp;CMakeLists.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 
&lt;br&gt;&amp;nbsp;Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 15 +
&lt;br&gt;&amp;nbsp;configure.ac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 18 +-
&lt;br&gt;&amp;nbsp;cpp/.gitignore &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 
&lt;br&gt;&amp;nbsp;cpp/CMakeLists.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 34 +++
&lt;br&gt;&amp;nbsp;cpp/Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 32 +++
&lt;br&gt;&amp;nbsp;cpp/poppler-document-private.h &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 55 ++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-document.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;316 ++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-document.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 92 ++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-embedded-file-private.h | &amp;nbsp; 40 ++++
&lt;br&gt;&amp;nbsp;cpp/poppler-embedded-file.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;116 +++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-embedded-file.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 55 ++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-font.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;166 ++++++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-font.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 91 ++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-global.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;162 ++++++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-global.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 86 +++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-page-private.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 44 +++++
&lt;br&gt;&amp;nbsp;cpp/poppler-page-transition.cpp &amp;nbsp; &amp;nbsp; | &amp;nbsp; 95 ++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-page-transition.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 82 +++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-page.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;121 +++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-page.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 62 +++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-private.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 70 +++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-private.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 66 +++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-rectangle.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 60 ++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-toc-private.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 +++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-toc.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;136 +++++++++++++++
&lt;br&gt;&amp;nbsp;cpp/poppler-toc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 74 ++++++++
&lt;br&gt;&amp;nbsp;poppler-cpp.pc.cmake &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;9 +
&lt;br&gt;&amp;nbsp;poppler-cpp.pc.in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;9 +
&lt;br&gt;&amp;nbsp;29 files changed, 2178 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 9d0cf201e96044dd679c26bea6255d986a6cd246
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 23:45:39 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add ignore file
&lt;br&gt;&lt;br&gt;diff --git a/cpp/.gitignore b/cpp/.gitignore
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..62535c7
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/.gitignore
&lt;br&gt;@@ -0,0 +1,6 @@
&lt;br&gt;+.deps
&lt;br&gt;+.libs
&lt;br&gt;+*.la
&lt;br&gt;+*.lo
&lt;br&gt;+Makefile
&lt;br&gt;+Makefile.in
&lt;br&gt;commit d783e92b863d8b22de6ca326328115fec63193ed
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 23:42:33 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] don't forget the cmake stuff when packing with the autotools
&lt;br&gt;&lt;br&gt;diff --git a/Makefile.am b/Makefile.am
&lt;br&gt;index 59544e4..6d279ad 100644
&lt;br&gt;--- a/Makefile.am
&lt;br&gt;+++ b/Makefile.am
&lt;br&gt;@@ -56,6 +56,7 @@ pkgconfig_DATA =				\
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Add CMake buildsystem files here so they get added on make dist
&lt;br&gt;&amp;nbsp;EXTRA_DIST +=							\
&lt;br&gt;+	cpp/CMakeLists.txt					\
&lt;br&gt;&amp;nbsp;	glib/demo/CMakeLists.txt				\
&lt;br&gt;&amp;nbsp;	glib/CMakeLists.txt					\
&lt;br&gt;&amp;nbsp;	glib/poppler-features.h.cmake				\
&lt;br&gt;@@ -85,6 +86,7 @@ EXTRA_DIST +=							\
&lt;br&gt;&amp;nbsp;	config.h.cmake						\
&lt;br&gt;&amp;nbsp;	poppler-cairo.pc.cmake					\
&lt;br&gt;&amp;nbsp;	poppler-config.h.cmake					\
&lt;br&gt;+	poppler-cpp.pc.cmake					\
&lt;br&gt;&amp;nbsp;	poppler-glib.pc.cmake					\
&lt;br&gt;&amp;nbsp;	poppler-qt.pc.cmake					\
&lt;br&gt;&amp;nbsp;	poppler-qt4.pc.cmake					\
&lt;br&gt;commit 0105caefe860e7a45fc7d3a1bd1162fe56bcfe6a
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 23:40:55 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add the pkg-config stuff
&lt;br&gt;&lt;br&gt;diff --git a/CMakeLists.txt b/CMakeLists.txt
&lt;br&gt;index f6cf57c..023229c 100644
&lt;br&gt;--- a/CMakeLists.txt
&lt;br&gt;+++ b/CMakeLists.txt
&lt;br&gt;@@ -452,6 +452,9 @@ endif(GLIB_FOUND)
&lt;br&gt;&amp;nbsp;if(CAIRO_FOUND)
&lt;br&gt;&amp;nbsp; &amp;nbsp;poppler_create_install_pkgconfig(poppler-cairo.pc lib${LIB_SUFFIX}/pkgconfig)
&lt;br&gt;&amp;nbsp;endif(CAIRO_FOUND)
&lt;br&gt;+if(ENABLE_CPP)
&lt;br&gt;+ &amp;nbsp;poppler_create_install_pkgconfig(poppler-cpp.pc lib${LIB_SUFFIX}/pkgconfig)
&lt;br&gt;+endif(ENABLE_CPP)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;message(&amp;quot;Building Poppler with support for:&amp;quot;)
&lt;br&gt;diff --git a/Makefile.am b/Makefile.am
&lt;br&gt;index 87209a6..59544e4 100644
&lt;br&gt;--- a/Makefile.am
&lt;br&gt;+++ b/Makefile.am
&lt;br&gt;@@ -27,6 +27,7 @@ endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;if BUILD_POPPLER_CPP
&lt;br&gt;&amp;nbsp;cpp_subdir = cpp
&lt;br&gt;+cpp_pc_file = poppler-cpp.pc
&lt;br&gt;&amp;nbsp;endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;if BUILD_UTILS
&lt;br&gt;@@ -40,7 +41,8 @@ EXTRA_DIST =					\
&lt;br&gt;&amp;nbsp;	poppler.pc.in				\
&lt;br&gt;&amp;nbsp;	poppler-cairo.pc.in			\
&lt;br&gt;&amp;nbsp;	poppler-splash.pc.in			\
&lt;br&gt;-	poppler-qt.pc.in
&lt;br&gt;+	poppler-qt.pc.in			\
&lt;br&gt;+	poppler-cpp.pc.in
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;pkgconfigdir = $(libdir)/pkgconfig
&lt;br&gt;&amp;nbsp;pkgconfig_DATA =				\
&lt;br&gt;@@ -49,7 +51,8 @@ pkgconfig_DATA =				\
&lt;br&gt;&amp;nbsp;	$(splash_pc_file)			\
&lt;br&gt;&amp;nbsp;	$(glib_pc_file)				\
&lt;br&gt;&amp;nbsp;	$(qt_pc_file) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;-	$(qt4_pc_file)
&lt;br&gt;+	$(qt4_pc_file)				\
&lt;br&gt;+	$(cpp_pc_file)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Add CMake buildsystem files here so they get added on make dist
&lt;br&gt;&amp;nbsp;EXTRA_DIST +=							\
&lt;br&gt;diff --git a/configure.ac b/configure.ac
&lt;br&gt;index 28d1b67..a7d61f7 100644
&lt;br&gt;--- a/configure.ac
&lt;br&gt;+++ b/configure.ac
&lt;br&gt;@@ -571,7 +571,8 @@ poppler-cairo.pc
&lt;br&gt;&amp;nbsp;poppler-splash.pc
&lt;br&gt;&amp;nbsp;poppler-glib.pc
&lt;br&gt;&amp;nbsp;poppler-qt.pc
&lt;br&gt;-poppler-qt4.pc])
&lt;br&gt;+poppler-qt4.pc
&lt;br&gt;+poppler-cpp.pc])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;echo &amp;quot;&amp;quot;
&lt;br&gt;diff --git a/poppler-cpp.pc.cmake b/poppler-cpp.pc.cmake
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..eeb11cc
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/poppler-cpp.pc.cmake
&lt;br&gt;@@ -0,0 +1,9 @@
&lt;br&gt;+prefix=@CMAKE_INSTALL_PREFIX@
&lt;br&gt;+exec_prefix=${prefix}
&lt;br&gt;+libdir=${exec_prefix}/lib@LIB_SUFFIX@
&lt;br&gt;+includedir=${prefix}/include
&lt;br&gt;+
&lt;br&gt;+Name: poppler-cpp
&lt;br&gt;+Description: cpp backend for Poppler PDF rendering library
&lt;br&gt;+Version: @POPPLER_VERSION@
&lt;br&gt;+Requires: poppler = @POPPLER_VERSION@
&lt;br&gt;diff --git a/poppler-cpp.pc.in b/poppler-cpp.pc.in
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..309f070
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/poppler-cpp.pc.in
&lt;br&gt;@@ -0,0 +1,9 @@
&lt;br&gt;+prefix=@prefix@
&lt;br&gt;+exec_prefix=@exec_prefix@
&lt;br&gt;+libdir=@libdir@
&lt;br&gt;+includedir=@includedir@
&lt;br&gt;+
&lt;br&gt;+Name: poppler-cpp
&lt;br&gt;+Description: cpp backend for Poppler PDF rendering library
&lt;br&gt;+Version: @VERSION@
&lt;br&gt;+Requires: poppler = @VERSION@
&lt;br&gt;commit d5a74f78df0dca24fd537b30424fd2ebb3efe3e2
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 23:35:06 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add the (rest of the) CMake build system for it
&lt;br&gt;&lt;br&gt;diff --git a/CMakeLists.txt b/CMakeLists.txt
&lt;br&gt;index ae5f8d6..f6cf57c 100644
&lt;br&gt;--- a/CMakeLists.txt
&lt;br&gt;+++ b/CMakeLists.txt
&lt;br&gt;@@ -23,6 +23,7 @@ option(BUILD_QT3_TESTS &amp;quot;Whether compile the Qt3 test programs.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(BUILD_QT4_TESTS &amp;quot;Whether compile the Qt4 test programs.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(ENABLE_SPLASH &amp;quot;Build the Splash graphics backend.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(ENABLE_UTILS &amp;quot;Compile poppler command line utils.&amp;quot; ON)
&lt;br&gt;+option(ENABLE_CPP &amp;quot;Compile poppler cpp wrapper.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(ENABLE_ABIWORD &amp;quot;Build the Abiword backend.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(ENABLE_LIBOPENJPEG &amp;quot;Use libopenjpeg for JPX streams.&amp;quot; ON)
&lt;br&gt;&amp;nbsp;option(ENABLE_LCMS &amp;quot;Use liblcms for color management.&amp;quot; ON)
&lt;br&gt;@@ -418,6 +419,9 @@ add_subdirectory(test)
&lt;br&gt;&amp;nbsp;if(QT4_FOUND)
&lt;br&gt;&amp;nbsp; &amp;nbsp;add_subdirectory(qt4)
&lt;br&gt;&amp;nbsp;endif(QT4_FOUND)
&lt;br&gt;+if(ENABLE_CPP)
&lt;br&gt;+ &amp;nbsp;add_subdirectory(cpp)
&lt;br&gt;+endif(ENABLE_CPP)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;set(PKG_CONFIG_VERSION_0_18 TRUE)
&lt;br&gt;&amp;nbsp;if(PKGCONFIG_EXECUTABLE)
&lt;br&gt;@@ -458,6 +462,7 @@ show_end_message(&amp;quot;qt wrapper&amp;quot; QT3_FOUND)
&lt;br&gt;&amp;nbsp;show_end_message(&amp;quot;qt4 wrapper&amp;quot; QT4_FOUND)
&lt;br&gt;&amp;nbsp;show_end_message(&amp;quot;glib wrapper&amp;quot; GLIB_FOUND)
&lt;br&gt;&amp;nbsp;# message(&amp;quot; &amp;nbsp;use gtk-doc: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_gtk_doc&amp;quot;) # TODO
&lt;br&gt;+show_end_message(&amp;quot;cpp wrapper&amp;quot; ENABLE_CPP)
&lt;br&gt;&amp;nbsp;show_end_message(&amp;quot;use libjpeg&amp;quot; ENABLE_LIBJPEG)
&lt;br&gt;&amp;nbsp;show_end_message(&amp;quot;use libpng&amp;quot; ENABLE_LIBPNG)
&lt;br&gt;&amp;nbsp;show_end_message(&amp;quot;use zlib&amp;quot; ENABLE_ZLIB)
&lt;br&gt;commit 0e41f937946e4e4c1b660406bd74e4afe8825b5f
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 23:31:46 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cpp] add the autotools buildsystem for it
&lt;br&gt;&lt;br&gt;diff --git a/Makefile.am b/Makefile.am
&lt;br&gt;index 2a75262..87209a6 100644
&lt;br&gt;--- a/Makefile.am
&lt;br&gt;+++ b/Makefile.am
&lt;br&gt;@@ -25,11 +25,15 @@ qt4_subdir = qt4
&lt;br&gt;&amp;nbsp;qt4_pc_file = poppler-qt4.pc
&lt;br&gt;&amp;nbsp;endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+if BUILD_POPPLER_CPP
&lt;br&gt;+cpp_subdir = cpp
&lt;br&gt;+endif
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;if BUILD_UTILS
&lt;br&gt;&amp;nbsp;utils_subdir = utils
&lt;br&gt;&amp;nbsp;endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) $(qt_subdir) test $(qt4_subdir)
&lt;br&gt;+SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) $(qt_subdir) test $(qt4_subdir) $(cpp_subdir)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;EXTRA_DIST =					\
&lt;br&gt;&amp;nbsp;	README-XPDF				\
&lt;br&gt;diff --git a/configure.ac b/configure.ac
&lt;br&gt;index 7a8ca19..28d1b67 100644
&lt;br&gt;--- a/configure.ac
&lt;br&gt;+++ b/configure.ac
&lt;br&gt;@@ -444,6 +444,19 @@ fi
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AM_CONDITIONAL(BUILD_POPPLER_QT4, test &amp;quot;x$enable_poppler_qt4&amp;quot; = &amp;quot;xyes&amp;quot;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+dnl
&lt;br&gt;+dnl CPP frontend
&lt;br&gt;+dnl
&lt;br&gt;+
&lt;br&gt;+AC_ARG_ENABLE(poppler-cpp,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_HELP_STRING([--disable-poppler-cpp],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [Don't compile poppler cpp wrapper.]),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enable_poppler_cpp=$enableval,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enable_poppler_cpp=&amp;quot;yes&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+AM_CONDITIONAL(BUILD_POPPLER_CPP, test &amp;quot;x$enable_poppler_cpp&amp;quot; = &amp;quot;xyes&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;AC_ARG_ENABLE(gtk-test,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_HELP_STRING([--disable-gtk-test],
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [Don't compile GTK+ test program.]),
&lt;br&gt;@@ -552,6 +565,7 @@ qt4/Makefile
&lt;br&gt;&amp;nbsp;qt4/src/Makefile
&lt;br&gt;&amp;nbsp;qt4/tests/Makefile
&lt;br&gt;&amp;nbsp;qt4/demos/Makefile
&lt;br&gt;+cpp/Makefile
&lt;br&gt;&amp;nbsp;poppler.pc
&lt;br&gt;&amp;nbsp;poppler-cairo.pc
&lt;br&gt;&amp;nbsp;poppler-splash.pc
&lt;br&gt;@@ -569,6 +583,7 @@ echo &amp;quot; &amp;nbsp;qt wrapper: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $enable_poppler_qt&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp;qt4 wrapper: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_poppler_qt4&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp;glib wrapper: &amp;nbsp; &amp;nbsp; &amp;nbsp; $enable_poppler_glib&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp; &amp;nbsp;use GDK: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_gdk&amp;quot;
&lt;br&gt;+echo &amp;quot; &amp;nbsp;cpp wrapper: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_poppler_cpp&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp;use gtk-doc: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_gtk_doc&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp;use libjpeg: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$enable_libjpeg&amp;quot;
&lt;br&gt;&amp;nbsp;echo &amp;quot; &amp;nbsp;use libpng: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $enable_libpng&amp;quot;
&lt;br&gt;diff --git a/cpp/Makefile.am b/cpp/Makefile.am
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..58b8dd1
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/Makefile.am
&lt;br&gt;@@ -0,0 +1,32 @@
&lt;br&gt;+INCLUDES =					\
&lt;br&gt;+	-I$(top_srcdir)				\
&lt;br&gt;+	-I$(top_srcdir)/goo			\
&lt;br&gt;+	-I$(top_srcdir)/poppler
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+poppler_includedir = $(includedir)/poppler/cpp
&lt;br&gt;+poppler_include_HEADERS =			\
&lt;br&gt;+	poppler-document.h			\
&lt;br&gt;+	poppler-embedded-file.h			\
&lt;br&gt;+	poppler-font.h				\
&lt;br&gt;+	poppler-global.h			\
&lt;br&gt;+	poppler-page.h				\
&lt;br&gt;+	poppler-page-transition.h		\
&lt;br&gt;+	poppler-rectangle.h			\
&lt;br&gt;+	poppler-toc.h
&lt;br&gt;+
&lt;br&gt;+lib_LTLIBRARIES = libpoppler-cpp.la
&lt;br&gt;+libpoppler_cpp_la_SOURCES =			\
&lt;br&gt;+	poppler-document.cpp			\
&lt;br&gt;+	poppler-embedded-file.cpp		\
&lt;br&gt;+	poppler-font.cpp			\
&lt;br&gt;+	poppler-global.cpp			\
&lt;br&gt;+	poppler-page.cpp			\
&lt;br&gt;+	poppler-page-transition.cpp		\
&lt;br&gt;+	poppler-private.cpp			\
&lt;br&gt;+	poppler-toc.cpp
&lt;br&gt;+
&lt;br&gt;+libpoppler_cpp_la_LIBADD = 			\
&lt;br&gt;+	$(top_builddir)/poppler/libpoppler.la
&lt;br&gt;+
&lt;br&gt;+libpoppler_cpp_la_LDFLAGS = -version-info 1:0:1 @create_shared_lib@
&lt;br&gt;commit 9727fdc0c682742335e44ddc2f32d60e4c59983a
&lt;br&gt;Author: Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 13 22:55:28 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Start of a pure C++ frontend for Poppler.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; This initial version (called 'poppler-cpp') includes preliminary support for:
&lt;br&gt;&amp;nbsp; &amp;nbsp; - document (loading from file name, some query methods, unlocking, font listing, embedded files)
&lt;br&gt;&amp;nbsp; &amp;nbsp; - page (some query methods) with page transitions
&lt;br&gt;&amp;nbsp; &amp;nbsp; - TOC
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Modelled a bit on the Qt4 API, it provides also an own &amp;quot;ustring&amp;quot; typedef representing UTF-16 strings,
&lt;br&gt;&amp;nbsp; &amp;nbsp; with methods to convert back/to UTF-8 and Latin 1.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Most probably it has bugs, but nevertheless worth testing and developing.
&lt;br&gt;&lt;br&gt;diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..42fbca2
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/CMakeLists.txt
&lt;br&gt;@@ -0,0 +1,34 @@
&lt;br&gt;+include_directories(
&lt;br&gt;+ &amp;nbsp;${CMAKE_CURRENT_BINARY_DIR}
&lt;br&gt;+)
&lt;br&gt;+
&lt;br&gt;+set(poppler_cpp_SRCS
&lt;br&gt;+ &amp;nbsp;poppler-document.cpp
&lt;br&gt;+ &amp;nbsp;poppler-embedded-file.cpp
&lt;br&gt;+ &amp;nbsp;poppler-font.cpp
&lt;br&gt;+ &amp;nbsp;poppler-global.cpp
&lt;br&gt;+ &amp;nbsp;poppler-page.cpp
&lt;br&gt;+ &amp;nbsp;poppler-page-transition.cpp
&lt;br&gt;+ &amp;nbsp;poppler-private.cpp
&lt;br&gt;+ &amp;nbsp;poppler-toc.cpp
&lt;br&gt;+)
&lt;br&gt;+
&lt;br&gt;+add_library(poppler-cpp SHARED ${poppler_cpp_SRCS})
&lt;br&gt;+set_target_properties(poppler-cpp PROPERTIES VERSION 0.1.0 SOVERSION 0)
&lt;br&gt;+target_link_libraries(poppler-cpp poppler)
&lt;br&gt;+if(MSVC)
&lt;br&gt;+target_link_libraries(poppler-cpp ${poppler_LIBS})
&lt;br&gt;+endif(MSVC)
&lt;br&gt;+install(TARGETS poppler-cpp RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX})
&lt;br&gt;+
&lt;br&gt;+install(FILES
&lt;br&gt;+ &amp;nbsp;poppler-document.h
&lt;br&gt;+ &amp;nbsp;poppler-embedded-file.h
&lt;br&gt;+ &amp;nbsp;poppler-font.h
&lt;br&gt;+ &amp;nbsp;poppler-global.h
&lt;br&gt;+ &amp;nbsp;poppler-page.h
&lt;br&gt;+ &amp;nbsp;poppler-page-transition.h
&lt;br&gt;+ &amp;nbsp;poppler-rectangle.h
&lt;br&gt;+ &amp;nbsp;poppler-toc.h
&lt;br&gt;+ &amp;nbsp;DESTINATION include/poppler/cpp)
&lt;br&gt;+
&lt;br&gt;diff --git a/cpp/poppler-document-private.h b/cpp/poppler-document-private.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..52ed935
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-document-private.h
&lt;br&gt;@@ -0,0 +1,55 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_DOCUMENT_PRIVATE_H
&lt;br&gt;+#define POPPLER_DOCUMENT_PRIVATE_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-config.h&amp;quot;
&lt;br&gt;+#include &amp;quot;GooString.h&amp;quot;
&lt;br&gt;+#include &amp;quot;PDFDoc.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class document;
&lt;br&gt;+class embedded_file;
&lt;br&gt;+
&lt;br&gt;+class document_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private(GooString *file_path, const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~document_private();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static document* check_document(document_private *doc);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PDFDoc *doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_locked;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;embedded_file *&amp;gt; embedded_files;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void init();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static unsigned int count;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..46f52b9
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-document.cpp
&lt;br&gt;@@ -0,0 +1,316 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-document.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-embedded-file.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-page.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-toc.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-document-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-embedded-file-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-toc-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;Catalog.h&amp;quot;
&lt;br&gt;+#include &amp;quot;ErrorCodes.h&amp;quot;
&lt;br&gt;+#include &amp;quot;GlobalParams.h&amp;quot;
&lt;br&gt;+#include &amp;quot;Outline.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;algorithm&amp;gt;
&lt;br&gt;+#include &amp;lt;memory&amp;gt;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+unsigned int poppler::document_private::count = 0U;
&lt;br&gt;+
&lt;br&gt;+document_private::document_private(GooString *file_path, const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: doc(0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;, is_locked(false)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString goo_owner_password(owner_password.c_str());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString goo_user_password(user_password.c_str());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;doc = new PDFDoc(file_path, &amp;goo_owner_password, &amp;goo_user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;init();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document_private::~document_private()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete_all(embedded_files);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete doc;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (count &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--count;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!count) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete globalParams;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;globalParams = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void document_private::init()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!count) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;globalParams = new GlobalParams();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setErrorFunction(detail::error_function);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;count++;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document* document_private::check_document(document_private *doc)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (doc-&amp;gt;doc-&amp;gt;isOk() || doc-&amp;gt;doc-&amp;gt;getErrorCode() == errEncrypted) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (doc-&amp;gt;doc-&amp;gt;getErrorCode() == errEncrypted) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc-&amp;gt;is_locked = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new document(*doc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+document::document(document_private &amp;dd)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(&amp;dd)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document::~document()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool document::is_locked() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;is_locked;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool document::unlock(const std::string &amp;owner_password, const std::string &amp;user_password)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document_private *newdoc = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdoc = new document_private(new GooString(d-&amp;gt;doc-&amp;gt;getFileName()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner_password, user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!newdoc-&amp;gt;doc-&amp;gt;isOk()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete newdoc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d = newdoc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d-&amp;gt;is_locked = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;is_locked;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document::page_mode_enum document::page_mode() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;getPageMode()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeNone:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_none;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeOutlines:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_outlines;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeThumbs:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_thumbs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeFullScreen:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return fullscreen;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeOC:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_oc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageModeAttach:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_attach;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return use_none;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document::page_layout_enum document::page_layout() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;getPageLayout()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutNone:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return no_layout;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutSinglePage:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return single_page;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutOneColumn:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return one_column;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutTwoColumnLeft:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return two_column_left;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutTwoColumnRight:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return two_column_right;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutTwoPageLeft:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return two_page_left;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case Catalog::pageLayoutTwoPageRight:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return two_page_right;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return no_layout;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void document::get_pdf_version(int *major, int *minor) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (major) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*major = d-&amp;gt;doc-&amp;gt;getPDFMajorVersion();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (minor) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*minor = d-&amp;gt;doc-&amp;gt;getPDFMinorVersion();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;std::string&amp;gt; document::info_keys() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;std::string&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object info;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;doc-&amp;gt;getDocInfo(&amp;info)-&amp;gt;isDict()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;std::string&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Dict *info_dict = info.getDict();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;std::string&amp;gt; keys(info_dict-&amp;gt;getLength());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; info_dict-&amp;gt;getLength(); ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keys[i] = std::string(info_dict-&amp;gt;getKey(i));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return keys;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring document::info_key(const std::string &amp;key) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object info;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;doc-&amp;gt;getDocInfo(&amp;info)-&amp;gt;isDict()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Dict *info_dict = info.getDict();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (info_dict-&amp;gt;lookup(PSTR(key.c_str()), &amp;obj)-&amp;gt;isString()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = detail::unicode_GooString_to_ustring(obj.getString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;obj.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int document::info_date(const std::string &amp;key) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (unsigned int)(-1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object info;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;doc-&amp;gt;getDocInfo(&amp;info)-&amp;gt;isDict()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (unsigned int)(-1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Dict *info_dict = info.getDict();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;unsigned int result = (unsigned int)(-1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (info_dict-&amp;gt;lookup(PSTR(key.c_str()), &amp;obj)-&amp;gt;isString()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = convert_date(obj.getString()-&amp;gt;getCString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;obj.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;info.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int document::pages() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;getNumPages();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page* document::create_page(const ustring &amp;label) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::auto_ptr&amp;lt;GooString&amp;gt; goolabel(detail::ustring_to_unicode_GooString(label));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int index = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;labelToIndex(goolabel.get(), &amp;index)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return create_page(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page* document::create_page(int index) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return index &amp;gt;= 0 &amp;&amp; index &amp;lt; d-&amp;gt;doc-&amp;gt;getNumPages() ? new page(d, index) : 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;font_info&amp;gt; document::fonts() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;font_info&amp;gt; result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_iterator it(0, d);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (it.has_next()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::vector&amp;lt;font_info&amp;gt; l = it.next();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;std::copy(l.begin(), l.end(), std::back_inserter(result));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_iterator* document::create_font_iterator(int start_page) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return new font_iterator(start_page, d);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc* document::create_toc() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return toc_private::load_from_outline(d-&amp;gt;doc-&amp;gt;getOutline());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool document::has_embedded_files() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;numEmbeddedFiles() &amp;gt; 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;embedded_file *&amp;gt; document::embedded_files() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;is_locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;embedded_file *&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (d-&amp;gt;embedded_files.empty() &amp;&amp; d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;numEmbeddedFiles() &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const int num = d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;numEmbeddedFiles();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d-&amp;gt;embedded_files.resize(num);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; num; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EmbFile *ef = d-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;embeddedFile(i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d-&amp;gt;embedded_files[i] = embedded_file_private::create(ef);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;embedded_files;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+document* document::load_from_file(const std::string &amp;file_name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const std::string &amp;user_password)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private *doc = new document_private(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new GooString(file_name.c_str()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner_password, user_password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return document_private::check_document(doc);
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..7ff4337
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-document.h
&lt;br&gt;@@ -0,0 +1,92 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_DOCUMENT_H
&lt;br&gt;+#define POPPLER_DOCUMENT_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-font.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class document_private;
&lt;br&gt;+class embedded_file;
&lt;br&gt;+class page;
&lt;br&gt;+class toc;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT document : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum page_mode_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use_none,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use_outlines,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use_thumbs,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fullscreen,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use_oc,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use_attach
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum page_layout_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;no_layout,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;single_page,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;one_column,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;two_column_left,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;two_column_right,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;two_page_left,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;two_page_right
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~document();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_locked() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool unlock(const std::string &amp;owner_password, const std::string &amp;user_password);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_mode_enum page_mode() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_layout_enum page_layout() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void get_pdf_version(int *major, int *minor) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;std::string&amp;gt; info_keys() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring info_key(const std::string &amp;key) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ info_date(const std::string &amp;key) const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int pages() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page* create_page(const ustring &amp;label) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page* create_page(int index) const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;font_info&amp;gt; fonts() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_iterator* create_font_iterator(int start_page = 0) const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc* create_toc() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool has_embedded_files() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;embedded_file *&amp;gt; embedded_files() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static document* load_from_file(const std::string &amp;file_name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;owner_password,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const std::string &amp;user_password);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document(document_private &amp;dd);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class document_private;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-embedded-file-private.h b/cpp/poppler-embedded-file-private.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..2acea65
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-embedded-file-private.h
&lt;br&gt;@@ -0,0 +1,40 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_EMBEDDED_FILE_PRIVATE_H
&lt;br&gt;+#define POPPLER_EMBEDDED_FILE_PRIVATE_H
&lt;br&gt;+
&lt;br&gt;+class EmbFile;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class embedded_file_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;embedded_file_private(EmbFile *ef);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~embedded_file_private();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static embedded_file* create(EmbFile *ef);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;EmbFile *emb_file;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-embedded-file.cpp b/cpp/poppler-embedded-file.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..487b32d
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-embedded-file.cpp
&lt;br&gt;@@ -0,0 +1,116 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-embedded-file.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-embedded-file-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;Object.h&amp;quot;
&lt;br&gt;+#include &amp;quot;Stream.h&amp;quot;
&lt;br&gt;+#include &amp;quot;Catalog.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+embedded_file_private::embedded_file_private(EmbFile *ef)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: emb_file(ef)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+embedded_file_private::~embedded_file_private()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete emb_file;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+embedded_file* embedded_file_private::create(EmbFile *ef)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return new embedded_file(*new embedded_file_private(ef));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+embedded_file::embedded_file(embedded_file_private &amp;dd)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(&amp;dd)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+embedded_file::~embedded_file()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool embedded_file::is_valid() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;emb_file-&amp;gt;isOk();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string embedded_file::name() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return std::string(d-&amp;gt;emb_file-&amp;gt;name()-&amp;gt;getCString());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring embedded_file::description() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return detail::unicode_GooString_to_ustring(d-&amp;gt;emb_file-&amp;gt;description());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int embedded_file::size() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;emb_file-&amp;gt;size();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int embedded_file::modification_date() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return convert_date(d-&amp;gt;emb_file-&amp;gt;modDate()-&amp;gt;getCString());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+unsigned int embedded_file::creation_date() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return convert_date(d-&amp;gt;emb_file-&amp;gt;createDate()-&amp;gt;getCString());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string embedded_file::checksum() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return std::string(d-&amp;gt;emb_file-&amp;gt;checksum()-&amp;gt;getCString());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string embedded_file::mime_type() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return std::string(d-&amp;gt;emb_file-&amp;gt;mimeType()-&amp;gt;getCString());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;char&amp;gt; embedded_file::data() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!is_valid()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;char&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Stream *stream = d-&amp;gt;emb_file-&amp;gt;streamObject().getStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream-&amp;gt;reset();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;char&amp;gt; ret(1024);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;size_t data_len = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while ((i = stream-&amp;gt;getChar()) != EOF) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (data_len == ret.size()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret.resize(ret.size() * 2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret[data_len] = (char)i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;++data_len;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ret.resize(data_len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-embedded-file.h b/cpp/poppler-embedded-file.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..250b84a
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-embedded-file.h
&lt;br&gt;@@ -0,0 +1,55 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_EMBEDDED_FILE_H
&lt;br&gt;+#define POPPLER_EMBEDDED_FILE_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class embedded_file_private;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT embedded_file : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~embedded_file();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_valid() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string name() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring description() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int size() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ modification_date() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;unsigned int /*time_t*/ creation_date() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string checksum() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string mime_type() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;char&amp;gt; data() const;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;embedded_file(embedded_file_private &amp;dd);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;embedded_file_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class embedded_file_private;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-font.cpp b/cpp/poppler-font.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..5c3221b
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-font.cpp
&lt;br&gt;@@ -0,0 +1,166 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-font.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-document-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;FontInfo.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+class poppler::font_info_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info_private()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: type(font_info::unknown)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, is_embedded(false)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, is_subset(false)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info_private(FontInfo *fi)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: type((font_info::type_enum)fi-&amp;gt;getType())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, is_embedded(fi-&amp;gt;getEmbedded())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, is_subset(fi-&amp;gt;getSubset())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, emb_ref(fi-&amp;gt;getEmbRef())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fi-&amp;gt;getName()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font_name = fi-&amp;gt;getName()-&amp;gt;getCString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fi-&amp;gt;getFile()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font_file = fi-&amp;gt;getFile()-&amp;gt;getCString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string font_name;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string font_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info::type_enum type : 5;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_embedded : 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_subset : 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Ref emb_ref;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class poppler::font_iterator_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_iterator_private(int start_page, document_private *dd)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: font_info_scanner(dd-&amp;gt;doc, start_page)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, total_pages(dd-&amp;gt;doc-&amp;gt;getNumPages())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, current_page((std::max)(start_page, 0) - 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~font_iterator_private()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FontInfoScanner font_info_scanner;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int total_pages;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int current_page;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+font_info::font_info()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new font_info_private())
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_info::font_info(font_info_private &amp;dd)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(&amp;dd)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_info::font_info(const font_info &amp;fi)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new font_info_private(*fi.d))
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_info::~font_info()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string font_info::name() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;font_name;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string font_info::file() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;font_file;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool font_info::is_embedded() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;is_embedded;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool font_info::is_subset() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;is_subset;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_info::type_enum font_info::type() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;type;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_info&amp; font_info::operator=(const font_info &amp;fi)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (this != &amp;fi) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*d = *fi.d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return *this;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+font_iterator::font_iterator(int start_page, document_private *dd)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new font_iterator_private(start_page, dd))
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+font_iterator::~font_iterator()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;font_info&amp;gt; font_iterator::next()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;++d-&amp;gt;current_page;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooList *items = d-&amp;gt;font_info_scanner.scan(1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!items) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::vector&amp;lt;font_info&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;font_info&amp;gt; fonts(items-&amp;gt;getLength());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; items-&amp;gt;getLength(); ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fonts[i] = font_info(*new font_info_private((FontInfo *)items-&amp;gt;get(i)));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;deleteGooList(items, FontInfo);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return fonts;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool font_iterator::has_next() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (d-&amp;gt;current_page + 1) &amp;lt; d-&amp;gt;total_pages;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int font_iterator::current_page() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;current_page;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-font.h b/cpp/poppler-font.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..854b7a4
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-font.h
&lt;br&gt;@@ -0,0 +1,91 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_FONT_H
&lt;br&gt;+#define POPPLER_FONT_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class document;
&lt;br&gt;+class document_private;
&lt;br&gt;+class font_info_private;
&lt;br&gt;+class font_iterator;
&lt;br&gt;+class font_iterator_private;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT font_info
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum type_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unknown,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type1c,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type1c_ot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type3,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;truetype,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;truetype_ot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cid_type0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cid_type0c,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cid_type0c_ot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cid_truetype,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cid_truetype_ot
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info(const font_info &amp;fi);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~font_info();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string name() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string file() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_embedded() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_subset() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;type_enum type() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info&amp; operator=(const font_info &amp;fi);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info(font_info_private &amp;dd);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_info_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class font_iterator;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT font_iterator : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~font_iterator();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;font_info&amp;gt; next();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool has_next() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int current_page() const;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_iterator(int, document_private *dd);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;font_iterator_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class document;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..ce27061
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-global.cpp
&lt;br&gt;@@ -0,0 +1,162 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;DateInfo.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;ctime&amp;gt;
&lt;br&gt;+#include &amp;lt;cstring&amp;gt;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+noncopyable::noncopyable()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+noncopyable::~noncopyable()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ustring::ustring()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring::ustring(size_type len, value_type ch)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: std::basic_string&amp;lt;value_type&amp;gt;(len, ch)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring::~ustring()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+char* ustring::to_utf_8(int *length) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!size()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (length) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*length = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const value_type *me = data();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const size_t len = size() * 2 + 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char *str = new char[len];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;str[0] = 0xfe;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;str[1] = 0xff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (size_t i = 0; i &amp;lt; size(); ++i, ++me) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str[i * 2 + 2] = (*me &amp; 0xff);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str[i * 2 + 3] = ((*me &amp;gt;&amp;gt; 8) &amp; 0xff);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (length) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*length = len;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return str;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::string ustring::to_latin1() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!size()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return std::string();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const size_type mylength = size();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string ret(mylength, '\0');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const value_type *me = data();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (size_type i = 0; i &amp;lt; mylength; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret[i] = (char)*me++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring ustring::from_utf_8(const char *str, int len)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (len &amp;lt;= 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;len = std::strlen(str);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (len &amp;lt;= 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int i = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_unicode = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if ((str[0] &amp; 0xff) == 0xfe &amp;&amp; (len &amp;gt; 1 &amp;&amp; (str[1] &amp; 0xff) == 0xff)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is_unicode = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i = 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const ustring::size_type ret_len = (len - i) / (is_unicode ? 2 : 1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring ret(ret_len, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;size_t ret_index = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring::value_type u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (is_unicode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (i &amp;lt; len) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;u = ((str[i] &amp; 0xff) &amp;lt;&amp;lt; 8) | (str[i + 1] &amp; 0xff);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i += 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret[ret_index++] = u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (i &amp;lt; len) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;u = str[i] &amp; 0xff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;++i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret[ret_index++] = u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring ustring::from_latin1(const std::string &amp;str)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const size_type l = str.size();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!l) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const char *c = str.data();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring ret(l, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (size_type i = 0; i &amp;lt; l; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret[i] = *c++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+unsigned int convert_date(const std::string &amp;date)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int year, mon, day, hour, min, sec, tzHours, tzMins;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char tz;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!parseDateString(date.c_str(), &amp;year, &amp;mon, &amp;day, &amp;hour, &amp;min, &amp;sec,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;tz, &amp;tzHours, &amp;tzMins)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (unsigned int)(-1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;struct tm time;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_sec = sec;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_min = min;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_hour = hour;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_mday = day;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_mon = mon - 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_year = year - 1900;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_wday = -1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_yday = -1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;time.tm_isdst = -1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return mktime(&amp;time);
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..e51878c
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-global.h
&lt;br&gt;@@ -0,0 +1,86 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_GLOBAL_H
&lt;br&gt;+#define POPPLER_GLOBAL_H
&lt;br&gt;+
&lt;br&gt;+#if defined(_WIN32)
&lt;br&gt;+# &amp;nbsp;define LIB_EXPORT __declspec(dllexport)
&lt;br&gt;+# &amp;nbsp;define LIB_IMPORT __declspec(dllimport)
&lt;br&gt;+#else
&lt;br&gt;+# &amp;nbsp;define LIB_EXPORT
&lt;br&gt;+# &amp;nbsp;define LIB_IMPORT
&lt;br&gt;+#endif
&lt;br&gt;+
&lt;br&gt;+#if defined(poppler_cpp_EXPORTS)
&lt;br&gt;+# &amp;nbsp;define POPPLER_CPP_EXPORT LIB_EXPORT
&lt;br&gt;+#else
&lt;br&gt;+# &amp;nbsp;define POPPLER_CPP_EXPORT LIB_IMPORT
&lt;br&gt;+#endif
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;string&amp;gt;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+namespace detail
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT noncopyable
&lt;br&gt;+{
&lt;br&gt;+protected:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;noncopyable();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~noncopyable();
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;noncopyable(const noncopyable &amp;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const noncopyable&amp; operator=(const noncopyable &amp;);
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+typedef detail::noncopyable noncopyable;
&lt;br&gt;+
&lt;br&gt;+enum rotation_enum { rotate_0, rotate_90, rotate_180, rotate_270 };
&lt;br&gt;+
&lt;br&gt;+enum page_box_enum { media_box, crop_box, bleed_box, trim_box, art_box };
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT ustring : public std::basic_string&amp;lt;unsigned short&amp;gt;
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring(size_type len, value_type ch);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~ustring();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char* to_utf_8(int *length = 0) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::string to_latin1() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static ustring from_utf_8(const char *str, int len = -1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static ustring from_latin1(const std::string &amp;str);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// forbid implicit std::string conversions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring(const std::string &amp;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;operator std::string() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring&amp; operator=(const std::string &amp;);
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+POPPLER_CPP_EXPORT unsigned int /*time_t*/ convert_date(const std::string &amp;date);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-page-private.h b/cpp/poppler-page-private.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..654478b
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-page-private.h
&lt;br&gt;@@ -0,0 +1,44 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_PAGE_PRIVATE_H
&lt;br&gt;+#define POPPLER_PAGE_PRIVATE_H
&lt;br&gt;+
&lt;br&gt;+class Page;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class document_private;
&lt;br&gt;+class page_transition;
&lt;br&gt;+
&lt;br&gt;+class page_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_private(document_private *doc, int index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~page_private();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;document_private *doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Page *page;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int index;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition *transition;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-page-transition.cpp b/cpp/poppler-page-transition.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..92ae4fc
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-page-transition.cpp
&lt;br&gt;@@ -0,0 +1,95 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-page-transition.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;PageTransition.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+class poppler::page_transition_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition_private(Object *trans)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: pt(trans)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PageTransition pt;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+page_transition::page_transition(Object *params)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new page_transition_private(params))
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition::page_transition(const page_transition &amp;pt)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new page_transition_private(*pt.d))
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition::~page_transition()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition::type_enum page_transition::type() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (page_transition::type_enum)d-&amp;gt;pt.getType();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int page_transition::duration() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;pt.getDuration();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition::alignment_enum page_transition::alignment() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (page_transition::alignment_enum)d-&amp;gt;pt.getAlignment();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition::direction_enum page_transition::direction() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (page_transition::direction_enum)d-&amp;gt;pt.getDirection();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int page_transition::angle() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;pt.getAngle();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+double page_transition::scale() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;pt.getScale();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool page_transition::is_rectangular() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;pt.isRectangular();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition&amp; page_transition::operator=(const page_transition &amp;pt)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (&amp;pt != this) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;page_transition_private *new_d = new page_transition_private(*pt.d);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_d = d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return *this;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-page-transition.h b/cpp/poppler-page-transition.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..4ecb179
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-page-transition.h
&lt;br&gt;@@ -0,0 +1,82 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_PAGE_TRANSITION_H
&lt;br&gt;+#define POPPLER_PAGE_TRANSITION_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+class Object;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class page;
&lt;br&gt;+class page_transition_private;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT page_transition
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum type_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replace = 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;split,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blinds,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;box,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wipe,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dissolve,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;glitter,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fly,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cover,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uncover,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fade
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum alignment_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;horizontal = 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vertical
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum direction_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inward = 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outward
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition(const page_transition &amp;pt);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~page_transition();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;type_enum type() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int duration() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;alignment_enum alignment() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;direction_enum direction() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int angle() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;double scale() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_rectangular() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition&amp; operator=(const page_transition &amp;pt);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition(Object *params);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class page;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-page.cpp b/cpp/poppler-page.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..b10cc5b
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-page.cpp
&lt;br&gt;@@ -0,0 +1,121 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-page.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-page-transition.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-document-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-page-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+page_private::page_private(document_private *_doc, int _index)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: doc(_doc)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;, page(doc-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;getPage(index + 1))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;, index(_index)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;, transition(0)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_private::~page_private()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete transition;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+page::page(document_private *doc, int index)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new page_private(doc, index))
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page::~page()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page::orientation_enum page::orientation() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const int rotation = d-&amp;gt;page-&amp;gt;getRotate();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (rotation) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case 90:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return landscape;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case 180:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return upside_down;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case 270:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return seascape;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return portrait;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+double page::duration() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;page-&amp;gt;getDuration();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+rectf page::page_rect(page_box_enum box) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PDFRectangle *r = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (box) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case media_box:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = d-&amp;gt;page-&amp;gt;getMediaBox();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case crop_box:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = d-&amp;gt;page-&amp;gt;getCropBox();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case bleed_box:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = d-&amp;gt;page-&amp;gt;getBleedBox();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case trim_box:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = d-&amp;gt;page-&amp;gt;getTrimBox();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case art_box:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = d-&amp;gt;page-&amp;gt;getArtBox();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (r) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return detail::pdfrectangle_to_rectf(*r);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return rectf();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring page::label() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString goo;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;doc-&amp;gt;doc-&amp;gt;getCatalog()-&amp;gt;indexToLabel(d-&amp;gt;index, &amp;goo)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ustring();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return detail::unicode_GooString_to_ustring(&amp;goo);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+page_transition* page::transition() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!d-&amp;gt;transition) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object o;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (d-&amp;gt;page-&amp;gt;getTrans(&amp;o)-&amp;gt;isDict()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;d-&amp;gt;transition = new page_transition(&amp;o);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;o.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;transition;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-page.h b/cpp/poppler-page.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..65cea52
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-page.h
&lt;br&gt;@@ -0,0 +1,62 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_PAGE_H
&lt;br&gt;+#define POPPLER_PAGE_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-rectangle.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class document;
&lt;br&gt;+class document_private;
&lt;br&gt;+class page_private;
&lt;br&gt;+class page_transition;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT page : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;enum orientation_enum {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;landscape,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;portrait,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;seascape,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upside_down
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~page();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;orientation_enum orientation() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;double duration() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rectf page_rect(page_box_enum box = crop_box) const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring label() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_transition* transition() const;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page(document_private *doc, int index);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;page_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class page_private;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class document;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-private.cpp b/cpp/poppler-private.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..16ba370
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-private.cpp
&lt;br&gt;@@ -0,0 +1,70 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;GooString.h&amp;quot;
&lt;br&gt;+#include &amp;quot;Page.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;iostream&amp;gt;
&lt;br&gt;+#include &amp;lt;sstream&amp;gt;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+void detail::error_function(int pos, char *msg, va_list args)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::ostringstream oss;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (pos &amp;gt;= 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oss &amp;lt;&amp;lt; &amp;quot;poppler/error (&amp;quot; &amp;lt;&amp;lt; pos &amp;lt;&amp;lt; &amp;quot;): &amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oss &amp;lt;&amp;lt; &amp;quot;poppler/error: &amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char buffer[4096]; // should be big enough
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;vsnprintf(buffer, sizeof(buffer) - 1, msg, args);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;oss &amp;lt;&amp;lt; buffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::cerr &amp;lt;&amp;lt; oss.str();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+rectf detail::pdfrectangle_to_rectf(const PDFRectangle &amp;pdfrect)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return rectf(pdfrect.x1, pdfrect.y1, pdfrect.x2 - pdfrect.x1, pdfrect.y2 - pdfrect.y1);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring detail::unicode_GooString_to_ustring(GooString *str)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ustring::from_utf_8(str-&amp;gt;getCString(), str-&amp;gt;getLength());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring detail::unicode_to_ustring(const Unicode *u, int length)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring str(length, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring::iterator it = str.begin(), it_end = str.end();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const Unicode *uu = u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (; it != it_end; ++it) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*it = ustring::value_type(*uu++);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return str;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+GooString* detail::ustring_to_unicode_GooString(const ustring &amp;str)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char *u = str.to_utf_8();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooString *goo = new GooString(u);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete [] u;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return goo;
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-private.h b/cpp/poppler-private.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..fb3bc6c
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-private.h
&lt;br&gt;@@ -0,0 +1,66 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_PRIVATE_H
&lt;br&gt;+#define POPPLER_PRIVATE_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-rectangle.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;CharTypes.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;stdarg.h&amp;gt;
&lt;br&gt;+
&lt;br&gt;+class GooString;
&lt;br&gt;+class PDFRectangle;
&lt;br&gt;+
&lt;br&gt;+#define PSTR(str) const_cast&amp;lt;char *&amp;gt;(str)
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+namespace detail
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+void error_function(int pos, char *msg, va_list args);
&lt;br&gt;+
&lt;br&gt;+rectf pdfrectangle_to_rectf(const PDFRectangle &amp;pdfrect);
&lt;br&gt;+
&lt;br&gt;+ustring unicode_GooString_to_ustring(GooString *str);
&lt;br&gt;+ustring unicode_to_ustring(const Unicode *u, int length);
&lt;br&gt;+GooString* ustring_to_unicode_GooString(const ustring &amp;str);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+template &amp;lt;typename ConstIterator&amp;gt;
&lt;br&gt;+void delete_all(ConstIterator it, ConstIterator end)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (it != end) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete *it++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+template &amp;lt;typename Collection&amp;gt;
&lt;br&gt;+void delete_all(const Collection &amp;c)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete_all(c.begin(), c.end());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-rectangle.h b/cpp/poppler-rectangle.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..7465edc
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-rectangle.h
&lt;br&gt;@@ -0,0 +1,60 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_RECTANGLE_H
&lt;br&gt;+#define POPPLER_RECTANGLE_H
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+template &amp;lt;typename T&amp;gt; class rectangle
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rectangle()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: x1(), y1(), x2(), y2()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rectangle(T _x, T _y, T w, T h)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: x1(_x), y1(_y), x2(x1 + w), y2(y1 + h)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~rectangle();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_empty() const
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ return (x1 == x2) &amp;&amp; (y1 == y2); }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;T x() const
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ return x1; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;T y() const
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ return y1; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;T width() const
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ return x2 - x1; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;T height() const
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ return y2 - y1; }
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;T x1, y1, x2, y2;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+typedef rectangle&amp;lt;int&amp;gt; rect;
&lt;br&gt;+typedef rectangle&amp;lt;double&amp;gt; rectf;
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-toc-private.h b/cpp/poppler-toc-private.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..e8841ff
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-toc-private.h
&lt;br&gt;@@ -0,0 +1,62 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_TOC_PRIVATE_H
&lt;br&gt;+#define POPPLER_TOC_PRIVATE_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-toc.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;+
&lt;br&gt;+class GooList;
&lt;br&gt;+class Outline;
&lt;br&gt;+class OutlineItem;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class toc_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_private();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~toc_private();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static toc* load_from_outline(Outline *outline);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_item root;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class toc_item_private
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_item_private();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~toc_item_private();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void load(OutlineItem *item);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void load_children(GooList *items);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;toc_item*&amp;gt; children;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring title;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_open;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/cpp/poppler-toc.cpp b/cpp/poppler-toc.cpp
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..6f05f21
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-toc.cpp
&lt;br&gt;@@ -0,0 +1,136 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-toc.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-toc-private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;poppler-private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;GooList.h&amp;quot;
&lt;br&gt;+#include &amp;quot;Outline.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace poppler;
&lt;br&gt;+
&lt;br&gt;+toc_private::toc_private()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_private::~toc_private()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc* toc_private::load_from_outline(Outline *outline)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!outline) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GooList *items = outline-&amp;gt;getItems();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!items || items-&amp;gt;getLength() &amp;lt; 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc *newtoc = new toc();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newtoc-&amp;gt;d-&amp;gt;root.d-&amp;gt;is_open = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newtoc-&amp;gt;d-&amp;gt;root.d-&amp;gt;load_children(outline-&amp;gt;getItems());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return newtoc;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_item_private::toc_item_private()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: is_open(false)
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_item_private::~toc_item_private()
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void toc_item_private::load(OutlineItem *item)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const Unicode *title_unicode = item-&amp;gt;getTitle();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const int title_length = item-&amp;gt;getTitleLength();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;title = detail::unicode_to_ustring(title_unicode, title_length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;is_open = item-&amp;gt;isOpen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void toc_item_private::load_children(GooList *items)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const int num_items = items-&amp;gt;getLength();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;children.resize(num_items);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; num_items; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OutlineItem *item = (OutlineItem *)items-&amp;gt;get(i);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toc_item *new_item = new toc_item();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_item-&amp;gt;d-&amp;gt;load(item);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;children[i] = new_item;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item-&amp;gt;open();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GooList *item_children = item-&amp;gt;getKids();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (item_children) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_item-&amp;gt;d-&amp;gt;load_children(item_children);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+toc::toc()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new toc_private())
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc::~toc()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+toc_item::toc_item()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: d(new toc_item_private())
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_item::~toc_item()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;delete d;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+ustring toc_item::title() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;title;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool toc_item::is_open() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;is_open;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+std::vector&amp;lt;toc_item *&amp;gt; toc_item::children() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;children;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_item::iterator toc_item::children_begin() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;children.begin();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+toc_item::iterator toc_item::children_end() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return d-&amp;gt;children.end();
&lt;br&gt;+}
&lt;br&gt;diff --git a/cpp/poppler-toc.h b/cpp/poppler-toc.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..8b09736
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/cpp/poppler-toc.h
&lt;br&gt;@@ -0,0 +1,74 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2009, Pino Toscano &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pino@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This program is free software; you can redistribute it and/or modify
&lt;br&gt;+ * it under the terms of the GNU General Public License as published by
&lt;br&gt;+ * the Free Software Foundation; either version 2, or (at your option)
&lt;br&gt;+ * any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This program is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+ * GNU General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License
&lt;br&gt;+ * along with this program; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#ifndef POPPLER_TOC_H
&lt;br&gt;+#define POPPLER_TOC_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;poppler-global.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;vector&amp;gt;
&lt;br&gt;+
&lt;br&gt;+namespace poppler
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+class toc_private;
&lt;br&gt;+class toc_item;
&lt;br&gt;+class toc_item_private;
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT toc : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~toc();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_item* root() const;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_private *d;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class toc_private;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class POPPLER_CPP_EXPORT toc_item : public poppler::noncopyable
&lt;br&gt;+{
&lt;br&gt;+public:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;typedef std::vector&amp;lt;toc_item *&amp;gt;::const_iterator iterator;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;~toc_item();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ustring title() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_open() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;std::vector&amp;lt;toc_item *&amp;gt; children() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;iterator children_begin() const;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;iterator children_end() const;
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_item();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;toc_item_private *d;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class toc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class toc_private;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;friend class toc_item_private;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26770585&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27cpp-frontend%27---6-commits---CMakeLists.txt-configure.ac-cpp-CMakeLists.txt-cpp-.gitignore-cpp-Makefile.am-cpp-poppler-document.cpp-cpp-poppler-document.h-cpp-poppler-document-private.h-cpp-poppler-embedded-file.cpp-cpp-poppler-embedded-file.h-cpp-poppler-embedded-file-private.h-cpp-poppler-font.cpp-cpp-poppler-font.h-cpp-poppler-global.cpp-cpp-poppler-global.h-cpp-poppler-page.cpp-cpp-poppler-page.h-cpp-poppler-page-private.h-cpp-poppler-page-transition.cpp-cpp-poppler-page-transition.h-cpp-poppler-private.cpp-cpp-poppler-private.h-cpp-poppler-rectangle.h-cpp-poppler-toc.cpp-cpp-poppler-toc.h-cpp-poppler-toc-private.h-Makefile.am-poppler-cpp.pc.cmake-poppler-cpp.pc.in-tp26770585p26770585.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26768040</id>
	<title>Changes to 'cpp-frontend'</title>
	<published>2009-12-13T09:39:18Z</published>
	<updated>2009-12-13T09:39:18Z</updated>
	<author>
		<name>Pino Toscano-2</name>
	</author>
	<content type="html">New branch 'cpp-frontend' available with the following commits:
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26768040&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Changes-to-%27cpp-frontend%27-tp26768040p26768040.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26758912</id>
	<title>poppler/Gfx.cc</title>
	<published>2009-12-12T08:25:32Z</published>
	<updated>2009-12-12T08:25:32Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/Gfx.cc | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;1 file changed, 1 insertion(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 62854051f4e47028147cc93a5faac39e2fa2c9fd
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26758912&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 12 17:22:08 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Initialize profileCommands in Gfx constructor
&lt;br&gt;&lt;br&gt;diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
&lt;br&gt;index 401b52e..69f99db 100644
&lt;br&gt;--- a/poppler/Gfx.cc
&lt;br&gt;+++ b/poppler/Gfx.cc
&lt;br&gt;@@ -565,6 +565,7 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA,
&lt;br&gt;&amp;nbsp; &amp;nbsp;catalog = catalogA;
&lt;br&gt;&amp;nbsp; &amp;nbsp;subPage = gTrue;
&lt;br&gt;&amp;nbsp; &amp;nbsp;printCommands = globalParams-&amp;gt;getPrintCommands();
&lt;br&gt;+ &amp;nbsp;profileCommands = globalParams-&amp;gt;getProfileCommands();
&lt;br&gt;&amp;nbsp; &amp;nbsp;textHaveCSPattern = gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;drawText = gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;maskHaveCSPattern = gFalse;
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26758912&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-Gfx.cc-tp26758912p26758912.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26758908</id>
	<title>Branch 'poppler-0.12' - poppler/Gfx.cc</title>
	<published>2009-12-12T08:25:19Z</published>
	<updated>2009-12-12T08:25:19Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/Gfx.cc | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;1 file changed, 1 insertion(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit ec36133e2d3693a05836aadb96a722262d48fd39
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26758908&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 12 17:22:08 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Initialize profileCommands in Gfx constructor
&lt;br&gt;&lt;br&gt;diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
&lt;br&gt;index 2a4c9b8..60eb78a 100644
&lt;br&gt;--- a/poppler/Gfx.cc
&lt;br&gt;+++ b/poppler/Gfx.cc
&lt;br&gt;@@ -565,6 +565,7 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA,
&lt;br&gt;&amp;nbsp; &amp;nbsp;catalog = catalogA;
&lt;br&gt;&amp;nbsp; &amp;nbsp;subPage = gTrue;
&lt;br&gt;&amp;nbsp; &amp;nbsp;printCommands = globalParams-&amp;gt;getPrintCommands();
&lt;br&gt;+ &amp;nbsp;profileCommands = globalParams-&amp;gt;getProfileCommands();
&lt;br&gt;&amp;nbsp; &amp;nbsp;textHaveCSPattern = gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;drawText = gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;maskHaveCSPattern = gFalse;
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26758908&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27poppler-0.12%27---poppler-Gfx.cc-tp26758908p26758908.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26755183</id>
	<title>Re: Testing Re: Multicolumn select</title>
	<published>2009-12-11T21:44:47Z</published>
	<updated>2009-12-11T21:44:47Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">A Dimecres 09 Desembre 2009 23:22:09, Baz va escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/12/9 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; A Dimecres 09 Desembre 2009 14:51:59, Baz va escriure:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 2009/12/8 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; What we want is something that makes text extraction/selection better,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; the definition of better is the problem here :D
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Ok. So it sounds like it would be worth adding tests in, so we can be
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; explicit about what we want text extraction to do.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I could do this in two ways:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; - write a test harness that calls the apis directly (following the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; example of cairo). This has the advantage that more apis could be
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; tested later, but complicates writing the tests; and in any case most
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; other tests will be about rendering not text extraction. Since this
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; would be a unit test, its also fragile to API changes.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; - extend pdftotext to allow me to specify start and end points for
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; text extraction (page,x,y). This would make writing tests easy - just
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; simple shell scripts along the lines of the git test suite. This
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; feature could be useful to end users too, I guess.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I like the second plan better, since it supports building ad-hoc tests
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; with pdfs attached to bugs. Since we already have -f and -l, (and -x,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; -y do something unrelated to the selection) I'm thinking of int args
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; -fx, -fy, -lx, -ly, which default to (0,0) (pageWidth, pageHeight).
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Why isn't x,y,W,H enough? AFAIR they define which area gets extracted.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Its not the same area. That mechanism crops every page from start to
&lt;br&gt;&amp;gt; finish to the same x,y,W,H box before dumping the text. Its useful for
&lt;br&gt;&amp;gt; removing header/footer sections in a whole-document dump. It also
&lt;br&gt;&amp;gt; doesn't hit the text selection code at all.
&lt;/div&gt;&lt;br&gt;I'm lost now, you originally said pdftotext was using your new code and now 
&lt;br&gt;you say it doesn't?
&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; By contrast, a reading-order selection, even on a single page, may
&lt;br&gt;&amp;gt; include text that lies outside the rectangle from the startpoint to
&lt;br&gt;&amp;gt; the endpoint. Also, the xyWH mechanism applies the start/end points to
&lt;br&gt;&amp;gt; every page, instead of only the start/end page as you would with a
&lt;br&gt;&amp;gt; selection.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Albert
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Does this sound useful to you?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; &amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26755183&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Testing-Re%3A--Multicolumn-select-tp26711477p26755183.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26740661</id>
	<title>Re: Poppler Fix #bug Number 25578</title>
	<published>2009-12-11T00:48:58Z</published>
	<updated>2009-12-11T00:48:58Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">A Divendres 11 Desembre 2009 07:07:49, amit aggarwal va escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; One more changes &amp;nbsp;in poppler../goo/FixedPoint.cc
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -- &amp;nbsp;int FixedPoint::div(int x, int y) {
&lt;br&gt;&amp;gt; -- &amp;nbsp;#if 1 //~tmp
&lt;br&gt;&amp;gt; -- &amp;nbsp; return ((FixPtInt64)x &amp;lt;&amp;lt; fixptShift) / y;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ++ int FixedPoint::div(int x, int y) {
&lt;br&gt;&amp;gt; ++ #if 1 //~tmp
&lt;br&gt;&amp;gt; ++ if(y&amp;gt;0)
&lt;br&gt;&amp;gt; ++ &amp;nbsp; &amp;nbsp;return ((FixPtInt64)x &amp;lt;&amp;lt; fixptShift) / y;
&lt;br&gt;&amp;gt; ++ &amp;nbsp;else
&lt;br&gt;&amp;gt; ++ &amp;nbsp; &amp;nbsp;return 0;
&lt;/div&gt;&lt;br&gt;Hi Amit, thanks for the patch, but please do not post patches both here and on 
&lt;br&gt;the bug because otherwise we lose track of which patches are the 
&lt;br&gt;newest/correct ones. I also have posted some more comments about the issue on 
&lt;br&gt;the bugzilla issue.
&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks
&lt;br&gt;&amp;gt; Amit
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Fri, Dec 11, 2009 at 12:27 PM, amit aggarwal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26740661&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;amitcs06@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; poppler/goo/FixedPoint.cc
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Old Code
&lt;br&gt;&amp;gt; &amp;gt; ---int FixedPoint::mul(int x, int y) {
&lt;br&gt;&amp;gt; &amp;gt; #if 1 //~tmp
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; return ((FixPtInt64)x * y) &amp;gt;&amp;gt; fixptShift;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; New Changes
&lt;br&gt;&amp;gt; &amp;gt; +++
&lt;br&gt;&amp;gt; &amp;gt; FixPtInt64 FixedPoint::mul(FixPtInt64 x, FixPtInt64 y) {
&lt;br&gt;&amp;gt; &amp;gt; #if 1 //~tmp
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; FixPtInt64 val;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; val =((FixPtInt64)(x * y))&amp;gt;&amp;gt;fixptShift;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; return val;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; poppler/goo/FixedPoint.h
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; OldCode
&lt;br&gt;&amp;gt; &amp;gt; --static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return
&lt;br&gt;&amp;gt; &amp;gt; x; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; New changes
&lt;br&gt;&amp;gt; &amp;gt; ++ &amp;nbsp;static FixedPoint make(FixPtInt64 valA) { FixedPoint x; x.val = valA;
&lt;br&gt;&amp;gt; &amp;gt; return x; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; -- &amp;nbsp;static int mul(int x, int y);
&lt;br&gt;&amp;gt; &amp;gt; ++ &amp;nbsp;static FixPtInt64 mul(FixPtInt64 x, FixPtInt64 y);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; -- &amp;nbsp;static int div(int x, int y);
&lt;br&gt;&amp;gt; &amp;gt; ++ &amp;nbsp;static FixPtInt64 div(FixPtInt64 x, FixPtInt64 y);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; -- &amp;nbsp;int val; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 16.16 fixed point
&lt;br&gt;&amp;gt; &amp;gt; ++ &amp;nbsp;FixPtInt64 val; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 16.16 fixed point
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; Thanks
&lt;br&gt;&amp;gt; &amp;gt; Amit Aggarwal
&lt;br&gt;&amp;gt; 
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26740661&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Poppler-Fix--bug-Number-25578-tp26739489p26740661.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26739562</id>
	<title>Re: Poppler Fix #bug Number 25578</title>
	<published>2009-12-10T23:07:49Z</published>
	<updated>2009-12-10T23:07:49Z</updated>
	<author>
		<name>Amit Aggarwal-3</name>
	</author>
	<content type="html">One more changes  in poppler../goo/FixedPoint.cc&lt;br&gt;&lt;br&gt;--  int FixedPoint::div(int x, int y) {&lt;br&gt;--  #if 1 //~tmp&lt;br&gt;--   return ((FixPtInt64)x &amp;lt;&amp;lt; fixptShift) / y;&lt;br&gt;&lt;br&gt;++ int FixedPoint::div(int x, int y) {&lt;br&gt;++ #if 1 //~tmp&lt;br&gt;
++ if(y&amp;gt;0)&lt;br&gt;++    return ((FixPtInt64)x &amp;lt;&amp;lt; fixptShift) / y;&lt;br&gt;++  else &lt;br&gt;++    return 0;&lt;br&gt;&lt;br&gt;&lt;br&gt;Thanks&lt;br&gt;Amit&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Fri, Dec 11, 2009 at 12:27 PM, amit aggarwal &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26739562&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;amitcs06@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;poppler/goo/FixedPoint.cc&lt;br&gt;&lt;br&gt;Old Code&lt;br&gt;---int FixedPoint::mul(int x, int y) {&lt;br&gt;#if 1 //~tmp&lt;br&gt;
  return ((FixPtInt64)x * y) &amp;gt;&amp;gt; fixptShift;&lt;br&gt;&lt;br&gt;New Changes&lt;br&gt;+++&lt;br&gt;FixPtInt64 FixedPoint::mul(FixPtInt64 x, FixPtInt64 y) {&lt;br&gt;
#if 1 //~tmp&lt;br&gt;  FixPtInt64 val;&lt;br&gt;  val =((FixPtInt64)(x * y))&amp;gt;&amp;gt;fixptShift;&lt;br&gt;&lt;br&gt;  return val;&lt;br&gt;&lt;br&gt;&lt;br&gt;poppler/goo/FixedPoint.h&lt;br&gt;&lt;br&gt;OldCode&lt;br&gt;--static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; }&lt;br&gt;

&lt;br&gt;New changes&lt;br&gt;++  static FixedPoint make(FixPtInt64 valA) { FixedPoint x; x.val = valA; return x; }&lt;br&gt;&lt;br&gt;--  static int mul(int x, int y);&lt;br&gt;++  static FixPtInt64 mul(FixPtInt64 x, FixPtInt64 y);&lt;br&gt;&lt;br&gt;&lt;br&gt;--  static int div(int x, int y);&lt;br&gt;

++  static FixPtInt64 div(FixPtInt64 x, FixPtInt64 y);&lt;br&gt;&lt;br&gt;--  int val;            // 16.16 fixed point&lt;br&gt;++  FixPtInt64 val;        // 16.16 fixed point&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Thanks&lt;br&gt;&lt;font color=&quot;#888888&quot;&gt;Amit Aggarwal&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Thanks&lt;br&gt;Amit Aggarwal&lt;br&gt;&lt;br&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26739562&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Poppler-Fix--bug-Number-25578-tp26739489p26739562.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26739489</id>
	<title>Poppler Fix #bug Number 25578</title>
	<published>2009-12-10T22:57:04Z</published>
	<updated>2009-12-10T22:57:04Z</updated>
	<author>
		<name>Amit Aggarwal-3</name>
	</author>
	<content type="html">poppler/goo/FixedPoint.cc&lt;br&gt;&lt;br&gt;Old Code&lt;br&gt;---int FixedPoint::mul(int x, int y) {&lt;br&gt;#if 1 //~tmp&lt;br&gt;  return ((FixPtInt64)x * y) &amp;gt;&amp;gt; fixptShift;&lt;br&gt;&lt;br&gt;New Changes&lt;br&gt;+++&lt;br&gt;FixPtInt64 FixedPoint::mul(FixPtInt64 x, FixPtInt64 y) {&lt;br&gt;
#if 1 //~tmp&lt;br&gt;  FixPtInt64 val;&lt;br&gt;  val =((FixPtInt64)(x * y))&amp;gt;&amp;gt;fixptShift;&lt;br&gt;&lt;br&gt;  return val;&lt;br&gt;&lt;br&gt;&lt;br&gt;poppler/goo/FixedPoint.h&lt;br&gt;&lt;br&gt;OldCode&lt;br&gt;--static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; }&lt;br&gt;
&lt;br&gt;New changes&lt;br&gt;++  static FixedPoint make(FixPtInt64 valA) { FixedPoint x; x.val = valA; return x; }&lt;br&gt;&lt;br&gt;--  static int mul(int x, int y);&lt;br&gt;++  static FixPtInt64 mul(FixPtInt64 x, FixPtInt64 y);&lt;br&gt;&lt;br&gt;&lt;br&gt;--  static int div(int x, int y);&lt;br&gt;
++  static FixPtInt64 div(FixPtInt64 x, FixPtInt64 y);&lt;br&gt;&lt;br&gt;--  int val;            // 16.16 fixed point&lt;br&gt;++  FixPtInt64 val;        // 16.16 fixed point&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Thanks&lt;br&gt;Amit Aggarwal&lt;br&gt;&lt;br&gt;
&lt;br /&gt;poppler/goo/FixedPoint.cc
&lt;br&gt;&lt;br&gt;Old Code
&lt;br&gt;---int FixedPoint::mul(int x, int y) {
&lt;br&gt;#if 1 //~tmp
&lt;br&gt;&amp;nbsp; return ((FixPtInt64)x * y) &amp;gt;&amp;gt; fixptShift;
&lt;br&gt;&lt;br&gt;New Changes
&lt;br&gt;+++
&lt;br&gt;FixPtInt64 FixedPoint::mul(FixPtInt64 x, FixPtInt64 y) {
&lt;br&gt;#if 1 //~tmp
&lt;br&gt;&amp;nbsp; FixPtInt64 val;
&lt;br&gt;&amp;nbsp; val =((FixPtInt64)(x * y))&amp;gt;&amp;gt;fixptShift;
&lt;br&gt;&lt;br&gt;&amp;nbsp; return val;
&lt;br&gt;&lt;br&gt;&lt;br&gt;poppler/goo/FixedPoint.h
&lt;br&gt;&lt;br&gt;OldCode
&lt;br&gt;--static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; }
&lt;br&gt;&lt;br&gt;New changes
&lt;br&gt;++ &amp;nbsp;static FixedPoint make(FixPtInt64 valA) { FixedPoint x; x.val = valA; return x; }
&lt;br&gt;&lt;br&gt;-- &amp;nbsp;static int mul(int x, int y);
&lt;br&gt;++ &amp;nbsp;static FixPtInt64 mul(FixPtInt64 x, FixPtInt64 y);
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- &amp;nbsp;static int div(int x, int y);
&lt;br&gt;++ &amp;nbsp;static FixPtInt64 div(FixPtInt64 x, FixPtInt64 y);
&lt;br&gt;&lt;br&gt;-- &amp;nbsp;int val;			// 16.16 fixed point
&lt;br&gt;++ &amp;nbsp;FixPtInt64 val;		// 16.16 fixed point
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26739489&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Poppler-Fix--bug-Number-25578-tp26739489p26739489.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26724395</id>
	<title>poppler/CairoOutputDev.cc</title>
	<published>2009-12-10T01:40:27Z</published>
	<updated>2009-12-10T01:40:27Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/CairoOutputDev.cc | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 4e6af25a028d16608111634c5467420e31fa399b
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26724395&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Dec 9 19:45:40 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cairo] Update font of TextPage in CairoOutputDev::updateAll()
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes a crash with some documents, see Evince bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=603934&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.gnome.org/show_bug.cgi?id=603934&lt;/a&gt;&lt;br&gt;&lt;br&gt;diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
&lt;br&gt;index 191fa33..9a0f3be 100644
&lt;br&gt;--- a/poppler/CairoOutputDev.cc
&lt;br&gt;+++ b/poppler/CairoOutputDev.cc
&lt;br&gt;@@ -294,6 +294,8 @@ void CairoOutputDev::updateAll(GfxState *state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateStrokeOpacity(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateBlendMode(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;needFontUpdate = gTrue;
&lt;br&gt;+ &amp;nbsp;if (text)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text-&amp;gt;updateFont(state);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void CairoOutputDev::setDefaultCTM(double *ctm) {
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26724395&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-CairoOutputDev.cc-tp26724395p26724395.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26719518</id>
	<title>Re: Testing Re: Multicolumn select</title>
	<published>2009-12-09T15:22:09Z</published>
	<updated>2009-12-09T15:22:09Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/12/9 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26719518&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; A Dimecres 09 Desembre 2009 14:51:59, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; 2009/12/8 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26719518&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; What we want is something that makes text extraction/selection better,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; the definition of better is the problem here :D
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Ok. So it sounds like it would be worth adding tests in, so we can be
&lt;br&gt;&amp;gt;&amp;gt; explicit about what we want text extraction to do.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I could do this in two ways:
&lt;br&gt;&amp;gt;&amp;gt; - write a test harness that calls the apis directly (following the
&lt;br&gt;&amp;gt;&amp;gt; example of cairo). This has the advantage that more apis could be
&lt;br&gt;&amp;gt;&amp;gt; tested later, but complicates writing the tests; and in any case most
&lt;br&gt;&amp;gt;&amp;gt; other tests will be about rendering not text extraction. Since this
&lt;br&gt;&amp;gt;&amp;gt; would be a unit test, its also fragile to API changes.
&lt;br&gt;&amp;gt;&amp;gt; - extend pdftotext to allow me to specify start and end points for
&lt;br&gt;&amp;gt;&amp;gt; text extraction (page,x,y). This would make writing tests easy - just
&lt;br&gt;&amp;gt;&amp;gt; simple shell scripts along the lines of the git test suite. This
&lt;br&gt;&amp;gt;&amp;gt; feature could be useful to end users too, I guess.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I like the second plan better, since it supports building ad-hoc tests
&lt;br&gt;&amp;gt;&amp;gt; with pdfs attached to bugs. Since we already have -f and -l, (and -x,
&lt;br&gt;&amp;gt;&amp;gt; -y do something unrelated to the selection) I'm thinking of int args
&lt;br&gt;&amp;gt;&amp;gt; -fx, -fy, -lx, -ly, which default to (0,0) (pageWidth, pageHeight).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Why isn't x,y,W,H enough? AFAIR they define which area gets extracted.
&lt;/div&gt;&lt;br&gt;Its not the same area. That mechanism crops every page from start to
&lt;br&gt;finish to the same x,y,W,H box before dumping the text. Its useful for
&lt;br&gt;removing header/footer sections in a whole-document dump. It also
&lt;br&gt;doesn't hit the text selection code at all.
&lt;br&gt;&lt;br&gt;By contrast, a reading-order selection, even on a single page, may
&lt;br&gt;include text that lies outside the rectangle from the startpoint to
&lt;br&gt;the endpoint. Also, the xyWH mechanism applies the start/end points to
&lt;br&gt;every page, instead of only the start/end page as you would with a
&lt;br&gt;selection.
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Albert
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Does this sound useful to you?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26719518&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26719518&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26719518&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Testing-Re%3A--Multicolumn-select-tp26711477p26719518.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26718874</id>
	<title>Re: Testing Re:  Multicolumn select</title>
	<published>2009-12-09T14:25:57Z</published>
	<updated>2009-12-09T14:25:57Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">A Dimecres 09 Desembre 2009 14:51:59, Baz va escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/12/8 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26718874&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; What we want is something that makes text extraction/selection better,
&lt;br&gt;&amp;gt; &amp;gt; the definition of better is the problem here :D
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Ok. So it sounds like it would be worth adding tests in, so we can be
&lt;br&gt;&amp;gt; explicit about what we want text extraction to do.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I could do this in two ways:
&lt;br&gt;&amp;gt; - write a test harness that calls the apis directly (following the
&lt;br&gt;&amp;gt; example of cairo). This has the advantage that more apis could be
&lt;br&gt;&amp;gt; tested later, but complicates writing the tests; and in any case most
&lt;br&gt;&amp;gt; other tests will be about rendering not text extraction. Since this
&lt;br&gt;&amp;gt; would be a unit test, its also fragile to API changes.
&lt;br&gt;&amp;gt; - extend pdftotext to allow me to specify start and end points for
&lt;br&gt;&amp;gt; text extraction (page,x,y). This would make writing tests easy - just
&lt;br&gt;&amp;gt; simple shell scripts along the lines of the git test suite. This
&lt;br&gt;&amp;gt; feature could be useful to end users too, I guess.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I like the second plan better, since it supports building ad-hoc tests
&lt;br&gt;&amp;gt; with pdfs attached to bugs. Since we already have -f and -l, (and -x,
&lt;br&gt;&amp;gt; -y do something unrelated to the selection) I'm thinking of int args
&lt;br&gt;&amp;gt; -fx, -fy, -lx, -ly, which default to (0,0) (pageWidth, pageHeight).
&lt;/div&gt;&lt;br&gt;Why isn't x,y,W,H enough? AFAIR they define which area gets extracted.
&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Does this sound useful to you?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26718874&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26718874&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Testing-Re%3A--Multicolumn-select-tp26711477p26718874.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26718810</id>
	<title>Poppler-data 0.4.0 released</title>
	<published>2009-12-09T14:21:10Z</published>
	<updated>2009-12-09T14:21:10Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">Available from
&lt;br&gt;&lt;a href=&quot;http://poppler.freedesktop.org/poppler-data-0.4.0.tar.gz&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://poppler.freedesktop.org/poppler-data-0.4.0.tar.gz&lt;/a&gt;&lt;br&gt;&lt;br&gt;Changes since 0.3.1:
&lt;br&gt;&amp;nbsp; Added a host of new files released under a free license by Adobe at 
&lt;br&gt;&lt;a href=&quot;http://opensource.adobe.com/wiki/display/pdfmapping/Mapping+Resources+for+PDF&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://opensource.adobe.com/wiki/display/pdfmapping/Mapping+Resources+for+PDF&lt;/a&gt;&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26718810&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Poppler-data-0.4.0-released-tp26718810p26718810.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26715535</id>
	<title>poppler/CairoOutputDev.cc</title>
	<published>2009-12-09T10:51:21Z</published>
	<updated>2009-12-09T10:51:21Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/CairoOutputDev.cc | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 4e6af25a028d16608111634c5467420e31fa399b
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715535&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Dec 9 19:45:40 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cairo] Update font of TextPage in CairoOutputDev::updateAll()
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes a crash with some documents, see Evince bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=603934&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.gnome.org/show_bug.cgi?id=603934&lt;/a&gt;&lt;br&gt;&lt;br&gt;diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
&lt;br&gt;index 191fa33..9a0f3be 100644
&lt;br&gt;--- a/poppler/CairoOutputDev.cc
&lt;br&gt;+++ b/poppler/CairoOutputDev.cc
&lt;br&gt;@@ -294,6 +294,8 @@ void CairoOutputDev::updateAll(GfxState *state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateStrokeOpacity(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateBlendMode(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;needFontUpdate = gTrue;
&lt;br&gt;+ &amp;nbsp;if (text)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text-&amp;gt;updateFont(state);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void CairoOutputDev::setDefaultCTM(double *ctm) {
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715535&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-CairoOutputDev.cc-tp26715535p26715535.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26715506</id>
	<title>poppler/CairoOutputDev.cc</title>
	<published>2009-12-09T10:49:47Z</published>
	<updated>2009-12-09T10:49:47Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/CairoOutputDev.cc | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 4e6af25a028d16608111634c5467420e31fa399b
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715506&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Dec 9 19:45:40 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cairo] Update font of TextPage in CairoOutputDev::updateAll()
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes a crash with some documents, see Evince bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=603934&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.gnome.org/show_bug.cgi?id=603934&lt;/a&gt;&lt;br&gt;&lt;br&gt;diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
&lt;br&gt;index 191fa33..9a0f3be 100644
&lt;br&gt;--- a/poppler/CairoOutputDev.cc
&lt;br&gt;+++ b/poppler/CairoOutputDev.cc
&lt;br&gt;@@ -294,6 +294,8 @@ void CairoOutputDev::updateAll(GfxState *state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateStrokeOpacity(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateBlendMode(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;needFontUpdate = gTrue;
&lt;br&gt;+ &amp;nbsp;if (text)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text-&amp;gt;updateFont(state);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void CairoOutputDev::setDefaultCTM(double *ctm) {
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715506&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-CairoOutputDev.cc-tp26715506p26715506.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26715502</id>
	<title>Branch 'poppler-0.12' - poppler/CairoOutputDev.cc</title>
	<published>2009-12-09T10:49:32Z</published>
	<updated>2009-12-09T10:49:32Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/CairoOutputDev.cc | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 36abc88231e3d62b12a98afcb0a3c4ed5f07a1e6
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715502&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Dec 9 19:45:40 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [cairo] Update font of TextPage in CairoOutputDev::updateAll()
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes a crash with some documents, see Evince bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=603934&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.gnome.org/show_bug.cgi?id=603934&lt;/a&gt;&lt;br&gt;&lt;br&gt;diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
&lt;br&gt;index 25d4167..a00db24 100644
&lt;br&gt;--- a/poppler/CairoOutputDev.cc
&lt;br&gt;+++ b/poppler/CairoOutputDev.cc
&lt;br&gt;@@ -292,6 +292,8 @@ void CairoOutputDev::updateAll(GfxState *state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateStrokeOpacity(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;updateBlendMode(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp;needFontUpdate = gTrue;
&lt;br&gt;+ &amp;nbsp;if (text)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text-&amp;gt;updateFont(state);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void CairoOutputDev::setDefaultCTM(double *ctm) {
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26715502&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27poppler-0.12%27---poppler-CairoOutputDev.cc-tp26715502p26715502.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26711477</id>
	<title>Testing Re:  Multicolumn select</title>
	<published>2009-12-09T06:51:59Z</published>
	<updated>2009-12-09T06:51:59Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/12/8 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26711477&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; What we want is something that makes text extraction/selection better, the
&lt;br&gt;&amp;gt; definition of better is the problem here :D
&lt;br&gt;&lt;br&gt;Ok. So it sounds like it would be worth adding tests in, so we can be
&lt;br&gt;explicit about what we want text extraction to do.
&lt;br&gt;&lt;br&gt;I could do this in two ways:
&lt;br&gt;- write a test harness that calls the apis directly (following the
&lt;br&gt;example of cairo). This has the advantage that more apis could be
&lt;br&gt;tested later, but complicates writing the tests; and in any case most
&lt;br&gt;other tests will be about rendering not text extraction. Since this
&lt;br&gt;would be a unit test, its also fragile to API changes.
&lt;br&gt;- extend pdftotext to allow me to specify start and end points for
&lt;br&gt;text extraction (page,x,y). This would make writing tests easy - just
&lt;br&gt;simple shell scripts along the lines of the git test suite. This
&lt;br&gt;feature could be useful to end users too, I guess.
&lt;br&gt;&lt;br&gt;I like the second plan better, since it supports building ad-hoc tests
&lt;br&gt;with pdfs attached to bugs. Since we already have -f and -l, (and -x,
&lt;br&gt;-y do something unrelated to the selection) I'm thinking of int args
&lt;br&gt;-fx, -fy, -lx, -ly, which default to (0,0) (pageWidth, pageHeight).
&lt;br&gt;&lt;br&gt;Does this sound useful to you?
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26711477&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Testing-Re%3A--Multicolumn-select-tp26711477p26711477.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26702833</id>
	<title>Re: Multicolumn select</title>
	<published>2009-12-08T15:38:09Z</published>
	<updated>2009-12-08T15:38:09Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">A Dimarts 08 Desembre 2009 02:11:50, Baz va escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/12/7 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26702833&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; Sorry for the late reply i've moved job and country meanwhile :D
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; A Dilluns 23 Novembre 2009 09:37:42, Baz va escriure:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 2009/11/18 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26702833&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; A Dilluns, 16 de novembre de 2009, Baz va escriure:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; I've checked now... yes pdftotext with no flags will hit the new
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; reading order code.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; And that is good or bad? :D
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; It turns out, good.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; These are the results &amp;nbsp;of comparing the sizes of diffs to acrobat
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; output &amp;nbsp;for poppler before and after the patch. The diff is just done
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; on word order, to try to pick up paragraphs that have been misplaced.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; The filenames refer to the bugzillas where I found these: freedesktop,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; gnome, ubuntu launchpad, and kde.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; (status, filename, unpatched, patched, difference)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; SAME fdo-18531-1.pdf 1215 1218 0%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; SAME gno-333967-1.pdf 971 971 0%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS gno-360722-1.pdf 553 431 22%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS gno-481825-1.pdf 2413 1582 34%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS gno-494078-1.pdf 7494 5462 27%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS gno-500352-1.pdf 11904 11204 5%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; FAIL gno-588476-1.pdf 1192 1277 -7%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; FAIL hig-2.0.pdf 3908 5057 -29%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; SAME kde-184399-1.pdf 159 159 0%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; SAME ubu-181737-1.pdf 18709 18724 0%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; FAIL ubu-251412-1.pdf 528 551 -4%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS ubu-33288-2.pdf 2535 154 93%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; SAME ubu-346403-1.pdf 437 439 0%
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PASS ubu-367770-1.pdf 2955 2408 18%
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Not sure i understand the numbers, do you mean that there are 6 documents
&lt;br&gt;&amp;gt; &amp;gt; that improve, 5 that are the same and 3 that are worse?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yes. Although the size of the differences is also interesting: the
&lt;br&gt;&amp;gt; ones that are better are significantly better. The only document
&lt;br&gt;&amp;gt; that's significantly worse is the hig document, but looking at that in
&lt;br&gt;&amp;gt; detail, this document is a dogs breakfast layout-wise, and goes wrong
&lt;br&gt;&amp;gt; when selecting bullet-pointed sections. If I was using that as a copy
&lt;br&gt;&amp;gt; &amp; paste, it wouldn't bother me much as I could just delete the
&lt;br&gt;&amp;gt; out-of-order bullet points. The numbering in the footnotes would be
&lt;br&gt;&amp;gt; more of a problem as they would sound bad in a screenreader.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; The 3 failures were largely due to numbered footnotes or tables; the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; body text was fine. So mostly the patched version is an improvement to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; reading order detection. If I can get the bullet points and numbers to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; be part of the correct block, those failures would go away.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Do you think you'll be able to get that done?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Not in the short term. What time I've had to look at this I've been
&lt;br&gt;&amp;gt; scratching my head over how to fit bidi selection into the code
&lt;br&gt;&amp;gt; without breaking it too much. I was trying to get this:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.w3.org/TR/charmod/#sec-LogicalOrder&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/TR/charmod/#sec-LogicalOrder&lt;/a&gt;&lt;br&gt;&amp;gt; I was hoping was that I could implement bidi selection, then move on
&lt;br&gt;&amp;gt; to improving reading order further. However, bidi depends not just on
&lt;br&gt;&amp;gt; the start and end position of the selection, and primaryLR, but also
&lt;br&gt;&amp;gt; the writing direction in the words where the selection endpoints lie,
&lt;br&gt;&amp;gt; /and/ requires words to be in reading order, which needs a bit of a
&lt;br&gt;&amp;gt; rewrite. Which got me looking at the larger rewrite that would be
&lt;br&gt;&amp;gt; needed to accomodate tagged pdf structures. None of that looks doable
&lt;br&gt;&amp;gt; without changing some method signatures, which I've been avoiding up
&lt;br&gt;&amp;gt; till now; I've got no idea what depends on TextOutputDev.h.
&lt;/div&gt;&lt;br&gt;Here's the guideline, do not hesitate to change things, but don't change just 
&lt;br&gt;for the fun of changing :D
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; The test script, in case you want to try this on your corpus; I was
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; running this in a directory of pdfs with a subdirectory 'acrobat' for
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; my ground truth. I ignored non-ascii characters because the acrobat
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; output was in win-1252.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; That mans having to run acrobat by hand right? That means running that
&lt;br&gt;&amp;gt; &amp;gt; script on my pdf files is unmanageable, on the other hand i can run a
&lt;br&gt;&amp;gt; &amp;gt; script that compares old and new pdftotext output, if it's different i
&lt;br&gt;&amp;gt; &amp;gt; manually check if i think that's an improvement or not, hoping that there
&lt;br&gt;&amp;gt; &amp;gt; are not MANY files that are different :D
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Now you see why I was hoping you had a test suite somewhere :)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I was thinking more along the lines of dumping text from a sample of
&lt;br&gt;&amp;gt; documents. Also, you will almost certainly find that /most/ files are
&lt;br&gt;&amp;gt; different; its the size of the difference that matters. The ones that
&lt;br&gt;&amp;gt; seem to have greatly improved or worsened are the ones I'd look at
&lt;br&gt;&amp;gt; manually.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; So do you want me to try that or you are working on a improved patch?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; At the end of the day its up to you how you decide if this series is
&lt;br&gt;&amp;gt; acceptable; for pdfs that aren't tagged there is no 'correct' reading
&lt;br&gt;&amp;gt; order, only a best guess. I can point out the places where the current
&lt;br&gt;&amp;gt; algorithm fails, but whether these errors are serious or not is a
&lt;br&gt;&amp;gt; matter of opinion; any automated testing would have to work something
&lt;br&gt;&amp;gt; like the perceptual-diff tests in cairo. I have no idea what your
&lt;br&gt;&amp;gt; acceptance criteria are, so I can't say whether running a bunch of
&lt;br&gt;&amp;gt; comparisons with acrobat would be useful to you. How did you decide
&lt;br&gt;&amp;gt; that the /current/ text extraction code was ok?
&lt;/div&gt;&lt;br&gt;It's the one that came with xpdf, so we (the poppler project) haven't touched 
&lt;br&gt;that code at all i think (maybe we did some code about actual text but not 
&lt;br&gt;much)
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; As for an improved patch...well like I said I was looking at other
&lt;br&gt;&amp;gt; issues. The only completed fix I have that isn't uploaded was that in
&lt;br&gt;&amp;gt; RTL docs, selections across page boundaries were wrong (evince passes
&lt;br&gt;&amp;gt; the tl/br corners to signal start/end of page). Everything else is
&lt;br&gt;&amp;gt; looking like bigger chunks of code, I don't want to do too much with
&lt;br&gt;&amp;gt; until I've an idea whether these patches are getting closer to what
&lt;br&gt;&amp;gt; you want.
&lt;br&gt;&lt;br&gt;What we want is something that makes text extraction/selection better, the 
&lt;br&gt;definition of better is the problem here :D
&lt;br&gt;&lt;br&gt;&amp;gt; I'll take a look at the doc you mentioned in the other mail.
&lt;br&gt;&lt;br&gt;Thanks :-)
&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Albert
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; PDF=$1
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; TXT=${PDF%%.pdf}.txt
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; cp acrobat/$TXT first
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; pdftotext $PDF second
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; ~/poppler/utils/pdftotext $PDF third
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; perl -i.bak -ne 'for(/([A-Za-z0-9.,;:]+)/g){print &amp;quot;$_\n&amp;quot;;}' first second
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;third DIFF12=$(diff -udwb first second | wc -l)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; DIFF13=$(diff -udwb first third | wc -l)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; DIFF23=$(diff -udwb second third | wc -l)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; DIFF=$(expr \( 100 \* \( $DIFF12 - $DIFF13 \) \) / $DIFF12 )
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; STATUS=SAME
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; if [ $DIFF -gt 1 ]
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; then
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; STATUS=PASS
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; fi
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; if [ $DIFF -lt -1 ]
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; then
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; STATUS=FAIL
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; fi
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; echo $STATUS $PDF $DIFF12 $DIFF13 ${DIFF}%
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; poppler mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26702833&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26702833&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multicolumn-select-tp26335524p26702833.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26687990</id>
	<title>Re: Multicolumn select</title>
	<published>2009-12-07T19:00:57Z</published>
	<updated>2009-12-07T19:00:57Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/12/7 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687990&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; A Dilluns 23 Novembre 2009 09:37:42, vàreu escriure:
&lt;br&gt;&amp;gt;&amp;gt; 2009/11/18 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687990&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; A Dilluns, 16 de novembre de 2009, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I've checked now... yes pdftotext with no flags will hit the new
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; reading order code.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; And that is good or bad? :D
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It turns out, good.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; These are the results  of comparing the sizes of diffs to acrobat
&lt;br&gt;&amp;gt;&amp;gt; output  for poppler before and after the patch. The diff is just done
&lt;br&gt;&amp;gt;&amp;gt; on word order, to try to pick up paragraphs that have been misplaced.
&lt;br&gt;&amp;gt;&amp;gt; The filenames refer to the bugzillas where I found these: freedesktop,
&lt;br&gt;&amp;gt;&amp;gt; gnome, ubuntu launchpad, and kde.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW can you have a look at &lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25482&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25482&lt;/a&gt;&amp;nbsp;?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;  Albert
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Its pushing letters semi-randomly into two separate line objects. A
&lt;br&gt;plausible explanation would be if the algorithm scans from the right
&lt;br&gt;edge of one glyph to the left of the next when adding glyphs to words
&lt;br&gt;(or words to lines). That would skip overlapped glyphs/words,
&lt;br&gt;producing everything I'm seeing here, and the code does do something
&lt;br&gt;like that.
&lt;br&gt;&lt;br&gt;Assuming thats right, theres an obvious fix (always scan left edge to
&lt;br&gt;left edge), and its not related to the other selection bugs. I'll
&lt;br&gt;comment on bugzilla once I've tracked this down in the coalesce()
&lt;br&gt;code.
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687990&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multicolumn-select-tp26335524p26687990.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26687653</id>
	<title>Re: Multicolumn select</title>
	<published>2009-12-07T18:11:50Z</published>
	<updated>2009-12-07T18:11:50Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/12/7 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687653&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Sorry for the late reply i've moved job and country meanwhile :D
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; A Dilluns 23 Novembre 2009 09:37:42, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; 2009/11/18 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687653&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; A Dilluns, 16 de novembre de 2009, Baz va escriure:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I've checked now... yes pdftotext with no flags will hit the new
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; reading order code.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; And that is good or bad? :D
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It turns out, good.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; These are the results  of comparing the sizes of diffs to acrobat
&lt;br&gt;&amp;gt;&amp;gt; output  for poppler before and after the patch. The diff is just done
&lt;br&gt;&amp;gt;&amp;gt; on word order, to try to pick up paragraphs that have been misplaced.
&lt;br&gt;&amp;gt;&amp;gt; The filenames refer to the bugzillas where I found these: freedesktop,
&lt;br&gt;&amp;gt;&amp;gt; gnome, ubuntu launchpad, and kde.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; (status, filename, unpatched, patched, difference)
&lt;br&gt;&amp;gt;&amp;gt; SAME fdo-18531-1.pdf 1215 1218 0%
&lt;br&gt;&amp;gt;&amp;gt; SAME gno-333967-1.pdf 971 971 0%
&lt;br&gt;&amp;gt;&amp;gt; PASS gno-360722-1.pdf 553 431 22%
&lt;br&gt;&amp;gt;&amp;gt; PASS gno-481825-1.pdf 2413 1582 34%
&lt;br&gt;&amp;gt;&amp;gt; PASS gno-494078-1.pdf 7494 5462 27%
&lt;br&gt;&amp;gt;&amp;gt; PASS gno-500352-1.pdf 11904 11204 5%
&lt;br&gt;&amp;gt;&amp;gt; FAIL gno-588476-1.pdf 1192 1277 -7%
&lt;br&gt;&amp;gt;&amp;gt; FAIL hig-2.0.pdf 3908 5057 -29%
&lt;br&gt;&amp;gt;&amp;gt; SAME kde-184399-1.pdf 159 159 0%
&lt;br&gt;&amp;gt;&amp;gt; SAME ubu-181737-1.pdf 18709 18724 0%
&lt;br&gt;&amp;gt;&amp;gt; FAIL ubu-251412-1.pdf 528 551 -4%
&lt;br&gt;&amp;gt;&amp;gt; PASS ubu-33288-2.pdf 2535 154 93%
&lt;br&gt;&amp;gt;&amp;gt; SAME ubu-346403-1.pdf 437 439 0%
&lt;br&gt;&amp;gt;&amp;gt; PASS ubu-367770-1.pdf 2955 2408 18%
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Not sure i understand the numbers, do you mean that there are 6 documents that
&lt;br&gt;&amp;gt; improve, 5 that are the same and 3 that are worse?
&lt;/div&gt;&lt;br&gt;Yes. Although the size of the differences is also interesting: the
&lt;br&gt;ones that are better are significantly better. The only document
&lt;br&gt;that's significantly worse is the hig document, but looking at that in
&lt;br&gt;detail, this document is a dogs breakfast layout-wise, and goes wrong
&lt;br&gt;when selecting bullet-pointed sections. If I was using that as a copy
&lt;br&gt;&amp; paste, it wouldn't bother me much as I could just delete the
&lt;br&gt;out-of-order bullet points. The numbering in the footnotes would be
&lt;br&gt;more of a problem as they would sound bad in a screenreader.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The 3 failures were largely due to numbered footnotes or tables; the
&lt;br&gt;&amp;gt;&amp;gt; body text was fine. So mostly the patched version is an improvement to
&lt;br&gt;&amp;gt;&amp;gt; reading order detection. If I can get the bullet points and numbers to
&lt;br&gt;&amp;gt;&amp;gt; be part of the correct block, those failures would go away.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Do you think you'll be able to get that done?
&lt;br&gt;&lt;br&gt;Not in the short term. What time I've had to look at this I've been
&lt;br&gt;scratching my head over how to fit bidi selection into the code
&lt;br&gt;without breaking it too much. I was trying to get this:
&lt;br&gt;&lt;a href=&quot;http://www.w3.org/TR/charmod/#sec-LogicalOrder&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/TR/charmod/#sec-LogicalOrder&lt;/a&gt;&lt;br&gt;I was hoping was that I could implement bidi selection, then move on
&lt;br&gt;to improving reading order further. However, bidi depends not just on
&lt;br&gt;the start and end position of the selection, and primaryLR, but also
&lt;br&gt;the writing direction in the words where the selection endpoints lie,
&lt;br&gt;/and/ requires words to be in reading order, which needs a bit of a
&lt;br&gt;rewrite. Which got me looking at the larger rewrite that would be
&lt;br&gt;needed to accomodate tagged pdf structures. None of that looks doable
&lt;br&gt;without changing some method signatures, which I've been avoiding up
&lt;br&gt;till now; I've got no idea what depends on TextOutputDev.h.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The test script, in case you want to try this on your corpus; I was
&lt;br&gt;&amp;gt;&amp;gt; running this in a directory of pdfs with a subdirectory 'acrobat' for
&lt;br&gt;&amp;gt;&amp;gt; my ground truth. I ignored non-ascii characters because the acrobat
&lt;br&gt;&amp;gt;&amp;gt; output was in win-1252.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; That mans having to run acrobat by hand right? That means running that script
&lt;br&gt;&amp;gt; on my pdf files is unmanageable, on the other hand i can run a script that
&lt;br&gt;&amp;gt; compares old and new pdftotext output, if it's different i manually check if i
&lt;br&gt;&amp;gt; think that's an improvement or not, hoping that there are not MANY files that
&lt;br&gt;&amp;gt; are different :D
&lt;/div&gt;&lt;br&gt;Now you see why I was hoping you had a test suite somewhere :)
&lt;br&gt;&lt;br&gt;I was thinking more along the lines of dumping text from a sample of
&lt;br&gt;documents. Also, you will almost certainly find that /most/ files are
&lt;br&gt;different; its the size of the difference that matters. The ones that
&lt;br&gt;seem to have greatly improved or worsened are the ones I'd look at
&lt;br&gt;manually.
&lt;br&gt;&lt;br&gt;&amp;gt; So do you want me to try that or you are working on a improved patch?
&lt;br&gt;&lt;br&gt;At the end of the day its up to you how you decide if this series is
&lt;br&gt;acceptable; for pdfs that aren't tagged there is no 'correct' reading
&lt;br&gt;order, only a best guess. I can point out the places where the current
&lt;br&gt;algorithm fails, but whether these errors are serious or not is a
&lt;br&gt;matter of opinion; any automated testing would have to work something
&lt;br&gt;like the perceptual-diff tests in cairo. I have no idea what your
&lt;br&gt;acceptance criteria are, so I can't say whether running a bunch of
&lt;br&gt;comparisons with acrobat would be useful to you. How did you decide
&lt;br&gt;that the /current/ text extraction code was ok?
&lt;br&gt;&lt;br&gt;As for an improved patch...well like I said I was looking at other
&lt;br&gt;issues. The only completed fix I have that isn't uploaded was that in
&lt;br&gt;RTL docs, selections across page boundaries were wrong (evince passes
&lt;br&gt;the tl/br corners to signal start/end of page). Everything else is
&lt;br&gt;looking like bigger chunks of code, I don't want to do too much with
&lt;br&gt;until I've an idea whether these patches are getting closer to what
&lt;br&gt;you want.
&lt;br&gt;&lt;br&gt;I'll take a look at the doc you mentioned in the other mail.
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Albert
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; PDF=$1
&lt;br&gt;&amp;gt;&amp;gt; TXT=${PDF%%.pdf}.txt
&lt;br&gt;&amp;gt;&amp;gt; cp acrobat/$TXT first
&lt;br&gt;&amp;gt;&amp;gt; pdftotext $PDF second
&lt;br&gt;&amp;gt;&amp;gt; ~/poppler/utils/pdftotext $PDF third
&lt;br&gt;&amp;gt;&amp;gt; perl -i.bak -ne 'for(/([A-Za-z0-9.,;:]+)/g){print &amp;quot;$_\n&amp;quot;;}' first second
&lt;br&gt;&amp;gt;&amp;gt;  third DIFF12=$(diff -udwb first second | wc -l)
&lt;br&gt;&amp;gt;&amp;gt; DIFF13=$(diff -udwb first third | wc -l)
&lt;br&gt;&amp;gt;&amp;gt; DIFF23=$(diff -udwb second third | wc -l)
&lt;br&gt;&amp;gt;&amp;gt; DIFF=$(expr \( 100 \* \( $DIFF12 - $DIFF13 \) \) / $DIFF12 )
&lt;br&gt;&amp;gt;&amp;gt; STATUS=SAME
&lt;br&gt;&amp;gt;&amp;gt; if [ $DIFF -gt 1 ]
&lt;br&gt;&amp;gt;&amp;gt; then
&lt;br&gt;&amp;gt;&amp;gt;     STATUS=PASS
&lt;br&gt;&amp;gt;&amp;gt; fi
&lt;br&gt;&amp;gt;&amp;gt; if [ $DIFF -lt -1 ]
&lt;br&gt;&amp;gt;&amp;gt; then
&lt;br&gt;&amp;gt;&amp;gt;     STATUS=FAIL
&lt;br&gt;&amp;gt;&amp;gt; fi
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; echo $STATUS $PDF $DIFF12 $DIFF13 ${DIFF}%
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26687653&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multicolumn-select-tp26335524p26687653.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26686246</id>
	<title>Re: Multicolumn select</title>
	<published>2009-12-07T15:32:39Z</published>
	<updated>2009-12-07T15:32:39Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">A Dilluns 23 Novembre 2009 09:37:42, vàreu escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/11/18 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26686246&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; A Dilluns, 16 de novembre de 2009, Baz va escriure:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I've checked now... yes pdftotext with no flags will hit the new
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; reading order code.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; And that is good or bad? :D
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It turns out, good.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; These are the results &amp;nbsp;of comparing the sizes of diffs to acrobat
&lt;br&gt;&amp;gt; output &amp;nbsp;for poppler before and after the patch. The diff is just done
&lt;br&gt;&amp;gt; on word order, to try to pick up paragraphs that have been misplaced.
&lt;br&gt;&amp;gt; The filenames refer to the bugzillas where I found these: freedesktop,
&lt;br&gt;&amp;gt; gnome, ubuntu launchpad, and kde.
&lt;/div&gt;&lt;br&gt;BTW can you have a look at &lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25482&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25482&lt;/a&gt;&amp;nbsp;?
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&amp;nbsp; Albert
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26686246&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multicolumn-select-tp26335524p26686246.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26686163</id>
	<title>Re: Multicolumn select</title>
	<published>2009-12-07T15:25:23Z</published>
	<updated>2009-12-07T15:25:23Z</updated>
	<author>
		<name>Albert Astals Cid-2</name>
	</author>
	<content type="html">Sorry for the late reply i've moved job and country meanwhile :D
&lt;br&gt;&lt;br&gt;A Dilluns 23 Novembre 2009 09:37:42, Baz va escriure:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/11/18 Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26686163&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; A Dilluns, 16 de novembre de 2009, Baz va escriure:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I've checked now... yes pdftotext with no flags will hit the new
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; reading order code.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; And that is good or bad? :D
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It turns out, good.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; These are the results &amp;nbsp;of comparing the sizes of diffs to acrobat
&lt;br&gt;&amp;gt; output &amp;nbsp;for poppler before and after the patch. The diff is just done
&lt;br&gt;&amp;gt; on word order, to try to pick up paragraphs that have been misplaced.
&lt;br&gt;&amp;gt; The filenames refer to the bugzillas where I found these: freedesktop,
&lt;br&gt;&amp;gt; gnome, ubuntu launchpad, and kde.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; (status, filename, unpatched, patched, difference)
&lt;br&gt;&amp;gt; SAME fdo-18531-1.pdf 1215 1218 0%
&lt;br&gt;&amp;gt; SAME gno-333967-1.pdf 971 971 0%
&lt;br&gt;&amp;gt; PASS gno-360722-1.pdf 553 431 22%
&lt;br&gt;&amp;gt; PASS gno-481825-1.pdf 2413 1582 34%
&lt;br&gt;&amp;gt; PASS gno-494078-1.pdf 7494 5462 27%
&lt;br&gt;&amp;gt; PASS gno-500352-1.pdf 11904 11204 5%
&lt;br&gt;&amp;gt; FAIL gno-588476-1.pdf 1192 1277 -7%
&lt;br&gt;&amp;gt; FAIL hig-2.0.pdf 3908 5057 -29%
&lt;br&gt;&amp;gt; SAME kde-184399-1.pdf 159 159 0%
&lt;br&gt;&amp;gt; SAME ubu-181737-1.pdf 18709 18724 0%
&lt;br&gt;&amp;gt; FAIL ubu-251412-1.pdf 528 551 -4%
&lt;br&gt;&amp;gt; PASS ubu-33288-2.pdf 2535 154 93%
&lt;br&gt;&amp;gt; SAME ubu-346403-1.pdf 437 439 0%
&lt;br&gt;&amp;gt; PASS ubu-367770-1.pdf 2955 2408 18%
&lt;/div&gt;&lt;br&gt;Not sure i understand the numbers, do you mean that there are 6 documents that 
&lt;br&gt;improve, 5 that are the same and 3 that are worse?
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The 3 failures were largely due to numbered footnotes or tables; the
&lt;br&gt;&amp;gt; body text was fine. So mostly the patched version is an improvement to
&lt;br&gt;&amp;gt; reading order detection. If I can get the bullet points and numbers to
&lt;br&gt;&amp;gt; be part of the correct block, those failures would go away.
&lt;br&gt;&lt;br&gt;Do you think you'll be able to get that done?
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The test script, in case you want to try this on your corpus; I was
&lt;br&gt;&amp;gt; running this in a directory of pdfs with a subdirectory 'acrobat' for
&lt;br&gt;&amp;gt; my ground truth. I ignored non-ascii characters because the acrobat
&lt;br&gt;&amp;gt; output was in win-1252.
&lt;br&gt;&lt;br&gt;That mans having to run acrobat by hand right? That means running that script 
&lt;br&gt;on my pdf files is unmanageable, on the other hand i can run a script that 
&lt;br&gt;compares old and new pdftotext output, if it's different i manually check if i 
&lt;br&gt;think that's an improvement or not, hoping that there are not MANY files that 
&lt;br&gt;are different :D
&lt;br&gt;&lt;br&gt;So do you want me to try that or you are working on a improved patch?
&lt;br&gt;&lt;br&gt;Albert
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; PDF=$1
&lt;br&gt;&amp;gt; TXT=${PDF%%.pdf}.txt
&lt;br&gt;&amp;gt; cp acrobat/$TXT first
&lt;br&gt;&amp;gt; pdftotext $PDF second
&lt;br&gt;&amp;gt; ~/poppler/utils/pdftotext $PDF third
&lt;br&gt;&amp;gt; perl -i.bak -ne 'for(/([A-Za-z0-9.,;:]+)/g){print &amp;quot;$_\n&amp;quot;;}' first second
&lt;br&gt;&amp;gt; &amp;nbsp;third DIFF12=$(diff -udwb first second | wc -l)
&lt;br&gt;&amp;gt; DIFF13=$(diff -udwb first third | wc -l)
&lt;br&gt;&amp;gt; DIFF23=$(diff -udwb second third | wc -l)
&lt;br&gt;&amp;gt; DIFF=$(expr \( 100 \* \( $DIFF12 - $DIFF13 \) \) / $DIFF12 )
&lt;br&gt;&amp;gt; STATUS=SAME
&lt;br&gt;&amp;gt; if [ $DIFF -gt 1 ]
&lt;br&gt;&amp;gt; then
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; STATUS=PASS
&lt;br&gt;&amp;gt; fi
&lt;br&gt;&amp;gt; if [ $DIFF -lt -1 ]
&lt;br&gt;&amp;gt; then
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; STATUS=FAIL
&lt;br&gt;&amp;gt; fi
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; echo $STATUS $PDF $DIFF12 $DIFF13 ${DIFF}%
&lt;br&gt;&amp;gt; 
&lt;/div&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26686163&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multicolumn-select-tp26335524p26686163.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26665647</id>
	<title>glib/poppler-annot.cc poppler/Annot.cc poppler/Annot.h poppler/Gfx.cc qt4/src</title>
	<published>2009-12-06T06:47:49Z</published>
	<updated>2009-12-06T06:47:49Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;glib/poppler-annot.cc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;poppler/Annot.cc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 24 +++++-------------------
&lt;br&gt;&amp;nbsp;poppler/Annot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 ++---
&lt;br&gt;&amp;nbsp;poppler/Gfx.cc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;qt4/src/poppler-annotation.cc | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;5 files changed, 10 insertions(+), 25 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 6798d3e52e36e91bceff3a1a96372e9d9c6f3813
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26665647&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sun Dec 6 15:34:36 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Use fixed size array in AnnotColor
&lt;br&gt;&lt;br&gt;diff --git a/glib/poppler-annot.cc b/glib/poppler-annot.cc
&lt;br&gt;index e019eca..50496e7 100644
&lt;br&gt;--- a/glib/poppler-annot.cc
&lt;br&gt;+++ b/glib/poppler-annot.cc
&lt;br&gt;@@ -391,7 +391,7 @@ poppler_annot_get_color (PopplerAnnot *poppler_annot)
&lt;br&gt;&amp;nbsp; &amp;nbsp;color = poppler_annot-&amp;gt;annot-&amp;gt;getColor ();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (color) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;double *values = color-&amp;gt;getValues ();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const double *values = color-&amp;gt;getValues ();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;switch (color-&amp;gt;getSpace ())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;diff --git a/poppler/Annot.cc b/poppler/Annot.cc
&lt;br&gt;index fb65ea6..dd360ec 100644
&lt;br&gt;--- a/poppler/Annot.cc
&lt;br&gt;+++ b/poppler/Annot.cc
&lt;br&gt;@@ -607,19 +607,16 @@ AnnotBorderBS::AnnotBorderBS(Dict *dict) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AnnotColor::AnnotColor() {
&lt;br&gt;&amp;nbsp; &amp;nbsp;length = 0;
&lt;br&gt;- &amp;nbsp;values = NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AnnotColor::AnnotColor(double gray) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;length = 1;
&lt;br&gt;- &amp;nbsp;values = (double *) gmallocn (length, sizeof(double));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;values[0] = gray;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AnnotColor::AnnotColor(double r, double g, double b) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;length = 3;
&lt;br&gt;- &amp;nbsp;values = (double *) gmallocn (length, sizeof(double));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;values[0] = r;
&lt;br&gt;&amp;nbsp; &amp;nbsp;values[1] = g;
&lt;br&gt;@@ -628,7 +625,6 @@ AnnotColor::AnnotColor(double r, double g, double b) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AnnotColor::AnnotColor(double c, double m, double y, double k) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;length = 4;
&lt;br&gt;- &amp;nbsp;values = (double *) gmallocn (length, sizeof(double));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;values[0] = c;
&lt;br&gt;&amp;nbsp; &amp;nbsp;values[1] = m;
&lt;br&gt;@@ -637,12 +633,11 @@ AnnotColor::AnnotColor(double c, double m, double y, double k) {
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AnnotColor::AnnotColor(Array *array) {
&lt;br&gt;- &amp;nbsp;// TODO: check what Acrobat does in the case of having more than 5 numbers.
&lt;br&gt;- &amp;nbsp;if (array-&amp;gt;getLength() &amp;lt; 5) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;length = array-&amp;gt;getLength();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;values = (double *) gmallocn (length, sizeof(double));
&lt;br&gt;+ &amp;nbsp;length = array-&amp;gt;getLength();
&lt;br&gt;+ &amp;nbsp;if (length &amp;gt; 4)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;length = 4;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for(int i = 0; i &amp;lt; length; i++) { &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;for (int i = 0; i &amp;lt; length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (array-&amp;gt;get(i, &amp;obj1)-&amp;gt;isNum()) {
&lt;br&gt;@@ -654,18 +649,9 @@ AnnotColor::AnnotColor(Array *array) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;values[i] = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.free();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;values = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;length = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-AnnotColor::~AnnotColor() {
&lt;br&gt;- &amp;nbsp;if (values)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;gfree (values);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;//------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp;// AnnotBorderStyle
&lt;br&gt;&amp;nbsp;//------------------------------------------------------------------------
&lt;br&gt;@@ -1076,7 +1062,7 @@ void Annot::setColor(AnnotColor *new_color) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (new_color) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj1, obj2;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;double *values = new_color-&amp;gt;getValues();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const double *values = new_color-&amp;gt;getValues();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.initArray(xref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; (int)new_color-&amp;gt;getSpace(); i++)
&lt;br&gt;diff --git a/poppler/Annot.h b/poppler/Annot.h
&lt;br&gt;index cb0bc96..3f3ed70 100644
&lt;br&gt;--- a/poppler/Annot.h
&lt;br&gt;+++ b/poppler/Annot.h
&lt;br&gt;@@ -291,14 +291,13 @@ public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;AnnotColor(double r, double g, double b);
&lt;br&gt;&amp;nbsp; &amp;nbsp;AnnotColor(double c, double m, double y, double k);
&lt;br&gt;&amp;nbsp; &amp;nbsp;AnnotColor(Array *array);
&lt;br&gt;- &amp;nbsp;~AnnotColor();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;AnnotColorSpace getSpace() const { return (AnnotColorSpace) length; }
&lt;br&gt;- &amp;nbsp;double *getValues() const { return values; }
&lt;br&gt;+ &amp;nbsp;const double *getValues() const { return values; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;double *values;
&lt;br&gt;+ &amp;nbsp;double values[4];
&lt;br&gt;&amp;nbsp; &amp;nbsp;int length;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
&lt;br&gt;index 2a4c9b8..401b52e 100644
&lt;br&gt;--- a/poppler/Gfx.cc
&lt;br&gt;+++ b/poppler/Gfx.cc
&lt;br&gt;@@ -4675,7 +4675,7 @@ void Gfx::drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out-&amp;gt;updateStrokeColorSpace(state);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (aColor &amp;&amp; (aColor-&amp;gt;getSpace() == AnnotColor::colorRGB)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;double *values = aColor-&amp;gt;getValues();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;const double *values = aColor-&amp;gt;getValues();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = values[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g = values[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = values[2];
&lt;br&gt;diff --git a/qt4/src/poppler-annotation.cc b/qt4/src/poppler-annotation.cc
&lt;br&gt;index 22f1e6a..98573c0 100644
&lt;br&gt;--- a/qt4/src/poppler-annotation.cc
&lt;br&gt;+++ b/qt4/src/poppler-annotation.cc
&lt;br&gt;@@ -2039,7 +2039,7 @@ QColor convertAnnotColor( AnnotColor *color )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return QColor();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;QColor newcolor;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;double *color_data = color-&amp;gt;getValues();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const double *color_data = color-&amp;gt;getValues();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;switch ( color-&amp;gt;getSpace() )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case AnnotColor::colorTransparent: // = 0,
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26665647&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/glib-poppler-annot.cc-poppler-Annot.cc-poppler-Annot.h-poppler-Gfx.cc-qt4-src-tp26665647p26665647.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26660098</id>
	<title>Branch 'poppler-0.12' - poppler/PDFDoc.cc</title>
	<published>2009-12-05T14:34:33Z</published>
	<updated>2009-12-05T14:34:33Z</updated>
	<author>
		<name>Albert Astals Cid-6</name>
	</author>
	<content type="html">&amp;nbsp;poppler/PDFDoc.cc | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+), 1 deletion(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit c9ee556ab8b9bab3107a5cb3489354b3d6187a8b
&lt;br&gt;Author: Axel Struebing &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;axel.struebing@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 5 22:31:29 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Add a empty space after null
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes bug 25465
&lt;br&gt;&lt;br&gt;diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
&lt;br&gt;index 4af402b..b088f6c 100644
&lt;br&gt;--- a/poppler/PDFDoc.cc
&lt;br&gt;+++ b/poppler/PDFDoc.cc
&lt;br&gt;@@ -20,6 +20,7 @@
&lt;br&gt;&amp;nbsp;// Copyright (C) 2008 Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;// Copyright (C) 2009 Eric Toombs &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ewtoombs@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;// Copyright (C) 2009 Kovid Goyal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kovid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+// Copyright (C) 2009 Axel Struebing &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;axel.struebing@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;//
&lt;br&gt;&amp;nbsp;// To see a description of the changes please see the Changelog file that
&lt;br&gt;&amp;nbsp;// came with your tarball or type make ChangeLog if you are building from git
&lt;br&gt;@@ -732,7 +733,7 @@ Guint PDFDoc::writeObject (Object* obj, Ref* ref, OutStream* outStr)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case objNull:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;outStr-&amp;gt;printf( &amp;quot;null&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;outStr-&amp;gt;printf( &amp;quot;null &amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case objArray:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array = obj-&amp;gt;getArray();
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660098&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27poppler-0.12%27---poppler-PDFDoc.cc-tp26660098p26660098.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26660074</id>
	<title>poppler/PDFDoc.cc</title>
	<published>2009-12-05T14:32:31Z</published>
	<updated>2009-12-05T14:32:31Z</updated>
	<author>
		<name>Albert Astals Cid-6</name>
	</author>
	<content type="html">&amp;nbsp;poppler/PDFDoc.cc | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 file changed, 2 insertions(+), 1 deletion(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 92fab93bee3748a73c09429cc8a105c16f21fed0
&lt;br&gt;Author: Axel Struebing &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;axel.struebing@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 5 22:31:29 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Add a empty space after null
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes bug 25465
&lt;br&gt;&lt;br&gt;diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
&lt;br&gt;index 4af402b..b088f6c 100644
&lt;br&gt;--- a/poppler/PDFDoc.cc
&lt;br&gt;+++ b/poppler/PDFDoc.cc
&lt;br&gt;@@ -20,6 +20,7 @@
&lt;br&gt;&amp;nbsp;// Copyright (C) 2008 Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;// Copyright (C) 2009 Eric Toombs &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ewtoombs@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;// Copyright (C) 2009 Kovid Goyal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kovid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+// Copyright (C) 2009 Axel Struebing &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;axel.struebing@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;//
&lt;br&gt;&amp;nbsp;// To see a description of the changes please see the Changelog file that
&lt;br&gt;&amp;nbsp;// came with your tarball or type make ChangeLog if you are building from git
&lt;br&gt;@@ -732,7 +733,7 @@ Guint PDFDoc::writeObject (Object* obj, Ref* ref, OutStream* outStr)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case objNull:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;outStr-&amp;gt;printf( &amp;quot;null&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;outStr-&amp;gt;printf( &amp;quot;null &amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case objArray:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array = obj-&amp;gt;getArray();
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660074&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-PDFDoc.cc-tp26660074p26660074.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26654008</id>
	<title>2 commits - poppler/Annot.cc poppler/Annot.h</title>
	<published>2009-12-05T01:18:25Z</published>
	<updated>2009-12-05T01:18:25Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/Annot.cc | &amp;nbsp; 31 +++++++++++++++----------------
&lt;br&gt;&amp;nbsp;poppler/Annot.h &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;2 files changed, 16 insertions(+), 16 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit 32103f45d0193b31e95269ea9123b8011d93e994
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26654008&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 5 10:14:18 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [annots] Add isVisible() to check whether annot is visible before drawing it
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; It takes into account annot flags and optional content.
&lt;br&gt;&lt;br&gt;diff --git a/poppler/Annot.cc b/poppler/Annot.cc
&lt;br&gt;index 20c8209..fb65ea6 100644
&lt;br&gt;--- a/poppler/Annot.cc
&lt;br&gt;+++ b/poppler/Annot.cc
&lt;br&gt;@@ -1262,22 +1262,29 @@ void Annot::drawCircleBottomRight(double cx, double cy, double r) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;appearBuf-&amp;gt;append(&amp;quot;S\n&amp;quot;);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void Annot::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;- &amp;nbsp;Object obj;
&lt;br&gt;-
&lt;br&gt;+GBool Annot::isVisible(GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check the flags
&lt;br&gt;&amp;nbsp; &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check the OC
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (optContentConfig &amp;&amp; oc.isRef()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (! optContentConfig-&amp;gt;optContentIsVisible(&amp;oc))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;return gTrue;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void Annot::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;+ &amp;nbsp;Object obj;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (!isVisible (printing))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;// draw the appearance stream
&lt;br&gt;&amp;nbsp; &amp;nbsp;appearance.fetch(xref, &amp;obj);
&lt;br&gt;&amp;nbsp; &amp;nbsp;gfx-&amp;gt;drawAnnot(&amp;obj, (AnnotBorder *)NULL, color,
&lt;br&gt;@@ -1691,12 +1698,8 @@ void AnnotLink::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
&lt;br&gt;&amp;nbsp;void AnnotLink::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// check the flags
&lt;br&gt;- &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;+ &amp;nbsp;if (!isVisible (printing))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// draw the appearance stream
&lt;br&gt;&amp;nbsp; &amp;nbsp;appearance.fetch(xref, &amp;obj);
&lt;br&gt;@@ -3416,12 +3419,8 @@ void AnnotWidget::generateFieldAppearance() {
&lt;br&gt;&amp;nbsp;void AnnotWidget::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// check the flags
&lt;br&gt;- &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;+ &amp;nbsp;if (!isVisible (printing))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;addDingbatsResource = gFalse;
&lt;br&gt;&amp;nbsp; &amp;nbsp;generateFieldAppearance ();
&lt;br&gt;diff --git a/poppler/Annot.h b/poppler/Annot.h
&lt;br&gt;index b83c1db..cb0bc96 100644
&lt;br&gt;--- a/poppler/Annot.h
&lt;br&gt;+++ b/poppler/Annot.h
&lt;br&gt;@@ -538,6 +538,7 @@ protected:
&lt;br&gt;&amp;nbsp; &amp;nbsp;void drawCircle(double cx, double cy, double r, GBool fill);
&lt;br&gt;&amp;nbsp; &amp;nbsp;void drawCircleTopLeft(double cx, double cy, double r);
&lt;br&gt;&amp;nbsp; &amp;nbsp;void drawCircleBottomRight(double cx, double cy, double r);
&lt;br&gt;+ &amp;nbsp;GBool isVisible(GBool printing);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Updates the field key of the annotation dictionary
&lt;br&gt;&amp;nbsp; &amp;nbsp;// and sets M to the current time
&lt;br&gt;commit c14dfc7102341f5e1ed67a05c0738d55befab1ec
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26654008&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Dec 5 10:07:46 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [annots] Do not check if annot is a link in Annot::draw()
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; AnnotLink already implements draw()
&lt;br&gt;&lt;br&gt;diff --git a/poppler/Annot.cc b/poppler/Annot.cc
&lt;br&gt;index 478ed21..20c8209 100644
&lt;br&gt;--- a/poppler/Annot.cc
&lt;br&gt;+++ b/poppler/Annot.cc
&lt;br&gt;@@ -1280,7 +1280,7 @@ void Annot::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// draw the appearance stream
&lt;br&gt;&amp;nbsp; &amp;nbsp;appearance.fetch(xref, &amp;obj);
&lt;br&gt;- &amp;nbsp;gfx-&amp;gt;drawAnnot(&amp;obj, (type == typeLink) ? border : (AnnotBorder *)NULL, color,
&lt;br&gt;+ &amp;nbsp;gfx-&amp;gt;drawAnnot(&amp;obj, (AnnotBorder *)NULL, color,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rect-&amp;gt;x1, rect-&amp;gt;y1, rect-&amp;gt;x2, rect-&amp;gt;y2);
&lt;br&gt;&amp;nbsp; &amp;nbsp;obj.free();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26654008&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/2-commits---poppler-Annot.cc-poppler-Annot.h-tp26654008p26654008.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26642944</id>
	<title>2 commits - poppler/GfxFont.cc poppler/PSOutputDev.cc</title>
	<published>2009-12-04T06:02:08Z</published>
	<updated>2009-12-04T06:02:08Z</updated>
	<author>
		<name>Albert Astals Cid-6</name>
	</author>
	<content type="html">&amp;nbsp;poppler/GfxFont.cc &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;9 +++++++++
&lt;br&gt;&amp;nbsp;poppler/PSOutputDev.cc | &amp;nbsp; 24 ++++++++++++++++--------
&lt;br&gt;&amp;nbsp;2 files changed, 25 insertions(+), 8 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit ddf85d4a51f605eed998c633857b8bb5c74ab590
&lt;br&gt;Author: Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642944&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 14:59:41 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Make the code a bit more resilient
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; By checking the GooString we are going to use really exists
&lt;br&gt;&lt;br&gt;diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
&lt;br&gt;index 67b5412..f577425 100644
&lt;br&gt;--- a/poppler/PSOutputDev.cc
&lt;br&gt;+++ b/poppler/PSOutputDev.cc
&lt;br&gt;@@ -1663,14 +1663,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded Type 1 font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1 &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedType1Font(&amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded Type 1C font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1C &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getOrigName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// use the PDF font name because the embedded font name might
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// not include the subset prefix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getOrigName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;@@ -1679,7 +1681,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded OpenType - Type 1C font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1COT &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getOrigName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// use the PDF font name because the embedded font name might
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// not include the subset prefix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getOrigName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;@@ -1688,7 +1691,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for external Type 1 font file
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1 &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getExtFontFile()) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getExtFontFile() &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// this assumes that the PS font name matches the PDF font name
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getName()-&amp;gt;copy();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupExternalType1Font(font-&amp;gt;getExtFontFile(), psName);
&lt;br&gt;@@ -1697,7 +1701,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedTrueType() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; (font-&amp;gt;getType() == fontTrueType ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp;font-&amp;gt;getType() == fontTrueTypeOT) &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedTrueTypeFont(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1710,7 +1715,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded CID PostScript font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDPostScript() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontCIDType0C &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedCIDType0Font(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1718,14 +1724,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDTrueType() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; (font-&amp;gt;getType() == fontCIDType2 ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp;font-&amp;gt;getType() == fontCIDType2OT) &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedCIDTrueTypeFont(font, &amp;fontFileID, psName, gTrue);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded OpenType - CID CFF font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDPostScript() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontCIDType0COT &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedOpenTypeCFFFont(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit 78b4afa0a44048b8d40438d400652dbae4cb99b1
&lt;br&gt;Author: Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642944&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 14:57:10 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Accept Fontname if FontName is not present
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes KDE bug 217013
&lt;br&gt;&lt;br&gt;diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc
&lt;br&gt;index f51c100..e7d564a 100644
&lt;br&gt;--- a/poppler/GfxFont.cc
&lt;br&gt;+++ b/poppler/GfxFont.cc
&lt;br&gt;@@ -230,6 +230,15 @@ void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;embFontName = new GooString(obj2.getName());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (embFontName == NULL) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;// get name with typo
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.dictLookup(&amp;quot;Fontname&amp;quot;, &amp;obj2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (obj2.isName()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;embFontName = new GooString(obj2.getName());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;error(-1, &amp;quot;The file uses Fontname instead of FontName please notify the creator that the file is broken&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// get family
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.dictLookup(&amp;quot;FontFamily&amp;quot;, &amp;obj2);
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642944&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/2-commits---poppler-GfxFont.cc-poppler-PSOutputDev.cc-tp26642944p26642944.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26642923</id>
	<title>Branch 'poppler-0.12' - 2 commits - poppler/GfxFont.cc poppler/PSOutputDev.cc</title>
	<published>2009-12-04T06:01:14Z</published>
	<updated>2009-12-04T06:01:14Z</updated>
	<author>
		<name>Albert Astals Cid-6</name>
	</author>
	<content type="html">&amp;nbsp;poppler/GfxFont.cc &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;9 +++++++++
&lt;br&gt;&amp;nbsp;poppler/PSOutputDev.cc | &amp;nbsp; 24 ++++++++++++++++--------
&lt;br&gt;&amp;nbsp;2 files changed, 25 insertions(+), 8 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit a6cdeb7be296b14d74cf1d2f22729dc7d0b9e31c
&lt;br&gt;Author: Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642923&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 14:59:41 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Make the code a bit more resilient
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; By checking the GooString we are going to use really exists
&lt;br&gt;&lt;br&gt;diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
&lt;br&gt;index b784c00..1cf2eea 100644
&lt;br&gt;--- a/poppler/PSOutputDev.cc
&lt;br&gt;+++ b/poppler/PSOutputDev.cc
&lt;br&gt;@@ -1662,14 +1662,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded Type 1 font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1 &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedType1Font(&amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded Type 1C font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1C &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getOrigName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// use the PDF font name because the embedded font name might
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// not include the subset prefix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getOrigName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;@@ -1678,7 +1680,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded OpenType - Type 1C font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1COT &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getOrigName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// use the PDF font name because the embedded font name might
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// not include the subset prefix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getOrigName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;@@ -1687,7 +1690,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for external Type 1 font file
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedType1() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontType1 &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getExtFontFile()) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getExtFontFile() &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// this assumes that the PS font name matches the PDF font name
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getName()-&amp;gt;copy();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupExternalType1Font(font-&amp;gt;getExtFontFile(), psName);
&lt;br&gt;@@ -1696,7 +1700,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedTrueType() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; (font-&amp;gt;getType() == fontTrueType ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp;font-&amp;gt;getType() == fontTrueTypeOT) &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedTrueTypeFont(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1709,7 +1714,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded CID PostScript font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDPostScript() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontCIDType0C &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedCIDType0Font(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1717,14 +1723,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDTrueType() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; (font-&amp;gt;getType() == fontCIDType2 ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp;font-&amp;gt;getType() == fontCIDType2OT) &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedCIDTrueTypeFont(font, &amp;fontFileID, psName, gTrue);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check for embedded OpenType - CID CFF font
&lt;br&gt;&amp;nbsp; &amp;nbsp;} else if (globalParams-&amp;gt;getPSEmbedCIDPostScript() &amp;&amp;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getType() == fontCIDType0COT &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID)) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontID(&amp;fontFileID) &amp;&amp;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; font-&amp;gt;getEmbeddedFontName()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;psName = font-&amp;gt;getEmbeddedFontName()-&amp;gt;sanitizedName(gTrue /* ps mode */);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;setupEmbeddedOpenTypeCFFFont(font, &amp;fontFileID, psName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;commit 4eaf44cdf4e6006b70712c055a97ab152c41d26f
&lt;br&gt;Author: Albert Astals Cid &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642923&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aacid@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 14:57:10 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Accept Fontname if FontName is not present
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fixes KDE bug 217013
&lt;br&gt;&lt;br&gt;diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc
&lt;br&gt;index f51c100..e7d564a 100644
&lt;br&gt;--- a/poppler/GfxFont.cc
&lt;br&gt;+++ b/poppler/GfxFont.cc
&lt;br&gt;@@ -230,6 +230,15 @@ void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;embFontName = new GooString(obj2.getName());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (embFontName == NULL) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;// get name with typo
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.dictLookup(&amp;quot;Fontname&amp;quot;, &amp;obj2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (obj2.isName()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;embFontName = new GooString(obj2.getName());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;error(-1, &amp;quot;The file uses Fontname instead of FontName please notify the creator that the file is broken&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.free();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// get family
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.dictLookup(&amp;quot;FontFamily&amp;quot;, &amp;obj2);
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642923&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Branch-%27poppler-0.12%27---2-commits---poppler-GfxFont.cc-poppler-PSOutputDev.cc-tp26642923p26642923.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26641866</id>
	<title>poppler/Annot.cc</title>
	<published>2009-12-04T04:28:54Z</published>
	<updated>2009-12-04T04:28:54Z</updated>
	<author>
		<name>Carlos Garcia Campos-5</name>
	</author>
	<content type="html">&amp;nbsp;poppler/Annot.cc | &amp;nbsp; 22 +++++++++-------------
&lt;br&gt;&amp;nbsp;1 file changed, 9 insertions(+), 13 deletions(-)
&lt;br&gt;&lt;br&gt;New commits:
&lt;br&gt;commit fee5cb0eec2ddb8d596289e9a6285cf04d97632e
&lt;br&gt;Author: Carlos Garcia Campos &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26641866&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlosgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 13:26:42 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; [annots] Remove redundant flags definition
&lt;br&gt;&lt;br&gt;diff --git a/poppler/Annot.cc b/poppler/Annot.cc
&lt;br&gt;index cb6a381..478ed21 100644
&lt;br&gt;--- a/poppler/Annot.cc
&lt;br&gt;+++ b/poppler/Annot.cc
&lt;br&gt;@@ -61,10 +61,6 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;DateInfo.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;lt;string.h&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define annotFlagHidden &amp;nbsp; &amp;nbsp;0x0002
&lt;br&gt;-#define annotFlagPrint &amp;nbsp; &amp;nbsp; 0x0004
&lt;br&gt;-#define annotFlagNoView &amp;nbsp; &amp;nbsp;0x0020
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;#define fieldFlagReadOnly &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x00000001
&lt;br&gt;&amp;nbsp;#define fieldFlagRequired &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x00000002
&lt;br&gt;&amp;nbsp;#define fieldFlagNoExport &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x00000004
&lt;br&gt;@@ -1270,9 +1266,9 @@ void Annot::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check the flags
&lt;br&gt;- &amp;nbsp;if ((flags &amp; annotFlagHidden) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; annotFlagPrint)) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; annotFlagNoView))) {
&lt;br&gt;+ &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1696,9 +1692,9 @@ void AnnotLink::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check the flags
&lt;br&gt;- &amp;nbsp;if ((flags &amp; annotFlagHidden) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; annotFlagPrint)) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; annotFlagNoView))) {
&lt;br&gt;+ &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -3421,9 +3417,9 @@ void AnnotWidget::draw(Gfx *gfx, GBool printing) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Object obj;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// check the flags
&lt;br&gt;- &amp;nbsp;if ((flags &amp; annotFlagHidden) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; annotFlagPrint)) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; annotFlagNoView))) {
&lt;br&gt;+ &amp;nbsp;if ((flags &amp; flagHidden) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(printing &amp;&amp; !(flags &amp; flagPrint)) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(!printing &amp;&amp; (flags &amp; flagNoView))) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;poppler mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26641866&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;poppler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/poppler&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.freedesktop.org/mailman/listinfo/poppler&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/poppler-Annot.cc-tp26641866p26641866.html" />
</entry>

</feed>
