From fe4fe9f1be082a1fe73efca8d4897b87d9136cb6 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 7 May 2009 20:04:07 +0000 Subject: remove the horrible hack in pdftosrc.cc for poppler, and just print that objstreams are not supported. git-svn-id: svn://tug.org/texlive/trunk@12996 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/web2c/pdftexdir/pdftosrc.cc | 205 +------------------------- 1 file changed, 4 insertions(+), 201 deletions(-) diff --git a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc index c1334bed373..89db6fe39a3 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc +++ b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc @@ -43,208 +43,7 @@ Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #include "Stream.h" #include "Array.h" #include "Dict.h" -#ifdef POPPLER_VERSION -// here we include a fixed version of XRef.h - -//======================================================================== -// -// XRef.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Brad Hards -// Copyright (C) 2006, 2008 Albert Astals Cid -// Copyright (C) 2007-2008 Julien Rebetez -// Copyright (C) 2007 Carlos Garcia Campos -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef XREF_H -#define XREF_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" - -class Dict; -class Stream; -class Parser; - -class ObjectStream { -public: - - // Create an object stream, using object number , - // generation 0. - ObjectStream(XRef *xref, int objStrNumA); - - ~ObjectStream(); - - // Return the object number of this object stream. - int getObjStrNum() { return objStrNum; } - - // Get the th object from this stream, which should be - // object number , generation 0. - Object *getObject(int objIdx, int objNum, Object *obj); - - int *getOffsets() { return offsets; } - Guint getFirstOffset() { return firstOffset; } - -private: - - int objStrNum; // object number of the object stream - int nObjects; // number of objects in the stream - Object *objs; // the objects (length = nObjects) - int *objNums; // the object numbers (length = nObjects) - int *offsets; // the object offsets (length = nObjects) - Guint firstOffset; -}; - -//------------------------------------------------------------------------ -// XRef -//------------------------------------------------------------------------ - -enum XRefEntryType { - xrefEntryFree, - xrefEntryUncompressed, - xrefEntryCompressed -}; - -struct XRefEntry { - Guint offset; - int gen; - XRefEntryType type; - bool updated; - Object obj; //if this entry was updated, obj will contains the updated object -}; - -class XRef { -public: - - // Constructor, create an empty XRef, used for PDF writing - XRef(); - // Constructor. Read xref table from stream. - XRef(BaseStream *strA); - - // Destructor. - ~XRef(); - - // Is xref table valid? - GBool isOk() { return ok; } - - // Get the error code (if isOk() returns false). - int getErrorCode() { return errCode; } - - // Set the encryption parameters. - void setEncryption(int permFlagsA, GBool ownerPasswordOkA, - Guchar *fileKeyA, int keyLengthA, - int encVersionA, int encRevisionA, - CryptAlgorithm encAlgorithmA); - - // Is the file encrypted? - GBool isEncrypted() { return encrypted; } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse); - GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse); - GBool okToChange(GBool ignoreOwnerPW = gFalse); - GBool okToCopy(GBool ignoreOwnerPW = gFalse); - GBool okToAddNotes(GBool ignoreOwnerPW = gFalse); - GBool okToFillForm(GBool ignoreOwnerPW = gFalse); - GBool okToAccessibility(GBool ignoreOwnerPW = gFalse); - GBool okToAssemble(GBool ignoreOwnerPW = gFalse); - - // Get catalog object. - Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); } - - // Fetch an indirect reference. - Object *fetch(int num, int gen, Object *obj); - - // Return the document's Info dictionary (if any). - Object *getDocInfo(Object *obj); - Object *getDocInfoNF(Object *obj); - - // Return the number of objects in the xref table. - int getNumObjects() { return size; } - - // Return the offset of the last xref table. - Guint getLastXRefPos() { return lastXRefPos; } - - // Return the catalog object reference. - int getRootNum() { return rootNum; } - int getRootGen() { return rootGen; } - - // Get end position for a stream in a damaged file. - // Returns false if unknown or file is not damaged. - GBool getStreamEnd(Guint streamStart, Guint *streamEnd); - - // Retuns the entry that belongs to the offset - int getNumEntry(Guint offset) const; - - // Direct access. - int getSize() { return size; } - XRefEntry *getEntry(int i) { return &entries[i]; } - Object *getTrailerDict() { return &trailerDict; } - ObjectStream *getObjStr() { return objStr; } - - // Write access - void setModifiedObject(Object* o, Ref r); - Ref addIndirectObject (Object* o); - void add(int num, int gen, Guint offs, GBool used); - void writeToFile(OutStream* outStr, GBool writeAllEntries); - -private: - - BaseStream *str; // input stream - Guint start; // offset in file (to allow for garbage - // at beginning of file) - XRefEntry *entries; // xref entries - int size; // size of array - int rootNum, rootGen; // catalog dict - GBool ok; // true if xref table is valid - int errCode; // error code (if is false) - Object trailerDict; // trailer dictionary - Guint lastXRefPos; // offset of last xref table - Guint *streamEnds; // 'endstream' positions - only used in - // damaged files - int streamEndsLen; // number of valid entries in streamEnds - ObjectStream *objStr; // cached object stream - GBool encrypted; // true if file is encrypted - int encRevision; - int encVersion; // encryption algorithm - CryptAlgorithm encAlgorithm; // encryption algorithm - int keyLength; // length of key, in bytes - int permFlags; // permission bits - Guchar fileKey[16]; // file decryption key - GBool ownerPasswordOk; // true if owner password is correct - - Guint getStartXref(); - GBool readXRef(Guint *pos); - GBool readXRefTable(Parser *parser, Guint *pos); - GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); - GBool readXRefStream(Stream *xrefStr, Guint *pos); - GBool constructXRef(); - Guint strToUnsigned(char *s); -}; - -#endif -#else #include "XRef.h" -#endif #include "Catalog.h" #include "Page.h" #include "GfxFont.h" @@ -350,6 +149,9 @@ int main(int argc, char *argv[]) (long unsigned) e->offset, e->gen, (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"); +#else // e->gen is the local index inside that object stream //int objStrOffset = xref->getEntry(e->offset)->offset; Object tmpObj; @@ -366,6 +168,7 @@ int main(int argc, char *argv[]) localOffsets[e->gen])); // (long unsigned) (objStrOffset + objStr->getStart() + localOffsets[e->gen])); tmpObj.free(); +#endif } } } else { -- cgit v1.2.3