summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/pdftexdir
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2011-07-20 07:00:05 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2011-07-20 07:00:05 +0000
commit89755f7344de571c4b1b7c68e90de39363a4d1ff (patch)
treed735587f7030f0536272048df7a4b53cefc133a4 /Build/source/texk/web2c/pdftexdir
parent713aef9b071ca2b5dd68d014e99897f0e5e2036c (diff)
libs/t1lib + texk/ps2pkm: bug fix and update
git-svn-id: svn://tug.org/texlive/trunk@23187 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/pdftexdir')
-rw-r--r--Build/source/texk/web2c/pdftexdir/ChangeLog8
-rw-r--r--Build/source/texk/web2c/pdftexdir/pdftoepdf.cc4
-rw-r--r--Build/source/texk/web2c/pdftexdir/pdftosrc.cc36
3 files changed, 45 insertions, 3 deletions
diff --git a/Build/source/texk/web2c/pdftexdir/ChangeLog b/Build/source/texk/web2c/pdftexdir/ChangeLog
index e6ebf36e44c..e154e64e33c 100644
--- a/Build/source/texk/web2c/pdftexdir/ChangeLog
+++ b/Build/source/texk/web2c/pdftexdir/ChangeLog
@@ -1,3 +1,11 @@
+2011-07-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * pdftosrc.cc: Rewrite the Object Stream handling for poppler
+ (or xpdf without patch-40-objectStream-support-for-pdftosrc).
+
+ * pdftoepdf.cc: Replace `#ifdef HAVE_GETPDFMAJORVERSION' by
+ '#ifdef POPPLER_VERSION' for poppler >= 0.12.
+
2011-05-12 Peter Breitenlohner <peb@mppmu.mpg.de>
* writepng.c: #define PNG_FP_1 for libpng < 1.5.0.
diff --git a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
index a5e8d3f79a8..e0981022485 100644
--- a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
+++ b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
@@ -717,7 +717,7 @@ read_pdf_info(char *image_name, char *page_name, int page_num,
PdfDocument *pdf_doc;
Page *page;
PDFRectangle *pagebox;
-#ifdef HAVE_GETPDFMAJORVERSION
+#ifdef POPPLER_VERSION
int pdf_major_version_found, pdf_minor_version_found;
#else
float pdf_version_found, pdf_version_wanted;
@@ -736,7 +736,7 @@ read_pdf_info(char *image_name, char *page_name, int page_num,
// this works only for PDF 1.x -- but since any versions of PDF newer
// than 1.x will not be backwards compatible to PDF 1.x, pdfTeX will
// then have to changed drastically anyway.
-#ifdef HAVE_GETPDFMAJORVERSION
+#ifdef POPPLER_VERSION
pdf_major_version_found = pdf_doc->doc->getPDFMajorVersion();
pdf_minor_version_found = pdf_doc->doc->getPDFMinorVersion();
if ((pdf_major_version_found > 1)
diff --git a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc
index a6debc4acc5..85021303cb5 100644
--- a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc
+++ b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc
@@ -40,6 +40,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include "Object.h"
#include "Stream.h"
+#include "Lexer.h"
+#include "Parser.h"
#include "Array.h"
#include "Dict.h"
#include "XRef.h"
@@ -149,7 +151,39 @@ int main(int argc, char *argv[])
(e->type == xrefEntryFree ? "f" : "n"));
else { // e->offset is the object number of the object stream
#ifdef POPPLER_VERSION
- fprintf(stderr, "warning: this version of pdftosrc doesn't support object stream (use pdftosrc from TeX Live if you need it)\n");
+ Stream *str;
+ Parser *parser;
+ Object objStr, obj1, obj2;
+ int nObjects, first, n;
+ int localOffset = 0;
+ Guint firstOffset;
+
+ assert(xref->fetch(e->offset, 0, &objStr)->isStream());
+ nObjects = objStr.streamGetDict()->lookup("N", &obj1)->getInt();
+ obj1.free();
+ first = objStr.streamGetDict()->lookup("First", &obj1)->getInt();
+ obj1.free();
+ firstOffset = objStr.getStream()->getBaseStream()->getStart() + first;
+
+ // parse the header: object numbers and offsets
+ objStr.streamReset();
+ obj1.initNull();
+ str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first);
+ parser = new Parser(xref, new Lexer(xref, str), gFalse);
+ for (n = 0; n < nObjects; ++n) {
+ parser->getObj(&obj1);
+ parser->getObj(&obj2);
+ if (n == e->gen)
+ localOffset = obj2.getInt();
+ obj1.free();
+ obj2.free();
+ }
+ while (str->getChar() != EOF) ;
+ delete parser;
+ objStr.free();
+
+ fprintf(outfile, "%.10lu 00000 n\n",
+ (long unsigned)(firstOffset + localOffset));
#else
// e->gen is the local index inside that object stream
//int objStrOffset = xref->getEntry(e->offset)->offset;