summaryrefslogtreecommitdiff
path: root/Build/source/libs/poppler/poppler-src/poppler/XRef.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/poppler/XRef.h')
-rw-r--r--Build/source/libs/poppler/poppler-src/poppler/XRef.h303
1 files changed, 0 insertions, 303 deletions
diff --git a/Build/source/libs/poppler/poppler-src/poppler/XRef.h b/Build/source/libs/poppler/poppler-src/poppler/XRef.h
deleted file mode 100644
index bf904d507c0..00000000000
--- a/Build/source/libs/poppler/poppler-src/poppler/XRef.h
+++ /dev/null
@@ -1,303 +0,0 @@
-//========================================================================
-//
-// 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 <bradh@frogmouth.net>
-// Copyright (C) 2006, 2008, 2010-2013, 2017, 2018 Albert Astals Cid <aacid@kde.org>
-// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org>
-// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org>
-// Copyright (C) 2010 Ilya Gorenbein <igorenbein@finjan.com>
-// Copyright (C) 2010 Hib Eris <hib@hiberis.nl>
-// Copyright (C) 2012, 2013, 2016 Thomas Freitag <Thomas.Freitag@kabelmail.de>
-// Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso@hotmail.it>
-// Copyright (C) 2013, 2017 Adrian Johnson <ajohnson@redneon.com>
-// Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com>
-//
-// 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 "poppler-config.h"
-#include "goo/gtypes.h"
-#include "goo/GooMutex.h"
-#include "Object.h"
-#include "Stream.h"
-
-#include <vector>
-
-class Dict;
-class Stream;
-class Parser;
-class PopplerCache;
-
-//------------------------------------------------------------------------
-// XRef
-//------------------------------------------------------------------------
-
-enum XRefEntryType {
- xrefEntryFree,
- xrefEntryUncompressed,
- xrefEntryCompressed,
- xrefEntryNone
-};
-
-struct XRefEntry {
- Goffset offset;
- int gen;
- XRefEntryType type;
- int flags;
- Object obj; //if this entry was updated, obj will contains the updated object
-
- enum Flag {
- // Regular flags
- Updated, // Entry was modified
-
- // Special flags -- available only after xref->scanSpecialFlags() is run
- Unencrypted, // Entry is stored in unencrypted form (meaningless in unencrypted documents)
- DontRewrite // Entry must not be written back in case of full rewrite
- };
-
- inline GBool getFlag(Flag flag) const {
- const int mask = (1 << (int)flag);
- return (flags & mask) != 0;
- }
-
- inline void setFlag(Flag flag, GBool value) {
- const int mask = (1 << (int)flag);
- if (value) {
- flags |= mask;
- } else {
- flags &= ~mask;
- }
- }
-};
-
-class XRef {
-public:
-
- // Constructor, create an empty XRef, used for PDF writing
- XRef();
- // Constructor, create an empty XRef but with info dict, used for PDF writing
- XRef(const Object *trailerDictA);
- // Constructor. Read xref table from stream.
- XRef(BaseStream *strA, Goffset pos, Goffset mainXRefEntriesOffsetA = 0, GBool *wasReconstructed = NULL, GBool reconstruct = false);
-
- // Destructor.
- ~XRef();
-
- XRef(const XRef &) = delete;
- XRef& operator=(const XRef &) = delete;
-
- // Copy xref but with new base stream!
- XRef *copy() const;
-
- // Is xref table valid?
- GBool isOk() const { return ok; }
-
- // Is the last XRef section a stream or a table?
- GBool isXRefStream() const { return xRefStream; }
-
- // Get the error code (if isOk() returns false).
- int getErrorCode() const { return errCode; }
-
- // Set the encryption parameters.
- void setEncryption(int permFlagsA, GBool ownerPasswordOkA,
- const Guchar *fileKeyA, int keyLengthA,
- int encVersionA, int encRevisionA,
- CryptAlgorithm encAlgorithmA);
- // Mark Encrypt entry as Unencrypted
- void markUnencrypted();
-
- void getEncryptionParameters(Guchar **fileKeyA, CryptAlgorithm *encAlgorithmA, int *keyLengthA);
-
- // Is the file encrypted?
- GBool isEncrypted() const { return encrypted; }
-
- // Check various permissions.
- GBool okToPrint(GBool ignoreOwnerPW = gFalse) const;
- GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse) const;
- GBool okToChange(GBool ignoreOwnerPW = gFalse) const;
- GBool okToCopy(GBool ignoreOwnerPW = gFalse) const;
- GBool okToAddNotes(GBool ignoreOwnerPW = gFalse) const;
- GBool okToFillForm(GBool ignoreOwnerPW = gFalse) const;
- GBool okToAccessibility(GBool ignoreOwnerPW = gFalse) const;
- GBool okToAssemble(GBool ignoreOwnerPW = gFalse) const;
- int getPermFlags() const { return permFlags; }
-
- // Get catalog object.
- Object getCatalog();
-
- // Fetch an indirect reference.
- Object fetch(int num, int gen, int recursion = 0);
-
- // Return the document's Info dictionary (if any).
- Object getDocInfo();
- Object getDocInfoNF();
-
- // Create and return the document's Info dictionary if none exists.
- // Otherwise return the existing one.
- Object createDocInfoIfNoneExists();
-
- // Remove the document's Info dictionary and update the trailer dictionary.
- void removeDocInfo();
-
- // Return the number of objects in the xref table.
- int getNumObjects() const { return size; }
-
- // Return the catalog object reference.
- int getRootNum() const { return rootNum; }
- int getRootGen() const { return rootGen; }
-
- // Get end position for a stream in a damaged file.
- // Returns false if unknown or file is not damaged.
- GBool getStreamEnd(Goffset streamStart, Goffset *streamEnd);
-
- // Retuns the entry that belongs to the offset
- int getNumEntry(Goffset offset);
-
- // Scans the document and sets special flags in all xref entries. One of those
- // flags is Unencrypted, which affects how the object is fetched. Therefore,
- // this function must be called before fetching unencrypted objects (e.g.
- // Encrypt dictionary, XRef streams). Note that the code that initializes
- // decryption doesn't need to call this function, because it runs before
- // decryption is enabled, and therefore the Unencrypted flag is ignored.
- void scanSpecialFlags();
-
- // Direct access.
- XRefEntry *getEntry(int i, GBool complainIfMissing = gTrue);
- Object *getTrailerDict() { return &trailerDict; }
-
- // Was the XRef modified?
- GBool isModified() const { return modified; }
- // Set the modification flag for XRef to true.
- void setModified() { modified = gTrue; }
-
- // Write access
- void setModifiedObject(const Object* o, Ref r);
- Ref addIndirectObject (const Object* o);
- void removeIndirectObject(Ref r);
- void add(int num, int gen, Goffset offs, GBool used);
-
- // Output XRef table to stream
- void writeTableToFile(OutStream* outStr, GBool writeAllEntries);
- // Output XRef stream contents to GooString and fill trailerDict fields accordingly
- void writeStreamToBuffer(GooString *stmBuf, Dict *xrefDict, XRef *xref);
-
- // to be thread safe during write where changes are not allowed
- void lock();
- void unlock();
-
-private:
-
- BaseStream *str; // input stream
- Goffset start; // offset in file (to allow for garbage
- // at beginning of file)
- XRefEntry *entries; // xref entries
- int capacity; // size of <entries> array
- int size; // number of entries
- int rootNum, rootGen; // catalog dict
- GBool ok; // true if xref table is valid
- int errCode; // error code (if <ok> is false)
- GBool xrefReconstructed; // marker, true if xref was already reconstructed
- Object trailerDict; // trailer dictionary
- GBool modified;
- Goffset *streamEnds; // 'endstream' positions - only used in
- // damaged files
- int streamEndsLen; // number of valid entries in streamEnds
- PopplerCache *objStrs; // cached object streams
- 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[32]; // file decryption key
- GBool ownerPasswordOk; // true if owner password is correct
- Goffset prevXRefOffset; // position of prev XRef section (= next to read)
- Goffset mainXRefEntriesOffset; // offset of entries in main XRef table
- GBool xRefStream; // true if last XRef section is a stream
- Goffset mainXRefOffset; // position of the main XRef table/stream
- GBool scannedSpecialFlags; // true if scanSpecialFlags has been called
- GBool strOwner; // true if str is owned by the instance
-#ifdef MULTITHREADED
- GooMutex mutex;
-#endif
-
- void init();
- int reserve(int newSize);
- int resize(int newSize);
- GBool readXRef(Goffset *pos, std::vector<Goffset> *followedXRefStm, std::vector<int> *xrefStreamObjsNum);
- GBool readXRefTable(Parser *parser, Goffset *pos, std::vector<Goffset> *followedXRefStm, std::vector<int> *xrefStreamObjsNum);
- GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n);
- GBool readXRefStream(Stream *xrefStr, Goffset *pos);
- GBool constructXRef(GBool *wasReconstructed, GBool needCatalogDict = gFalse);
- GBool parseEntry(Goffset offset, XRefEntry *entry);
- void readXRefUntil(int untilEntryNum, std::vector<int> *xrefStreamObjsNum = NULL);
- void markUnencrypted(Object *obj);
-
- class XRefWriter {
- public:
- XRefWriter() = default;
- virtual void startSection(int first, int count) = 0;
- virtual void writeEntry(Goffset offset, int gen, XRefEntryType type) = 0;
- virtual ~XRefWriter() {};
-
- XRefWriter(const XRefWriter &) = delete;
- XRefWriter& operator=(const XRefWriter &other) = delete;
- };
-
- // XRefWriter subclass that writes a XRef table
- class XRefTableWriter: public XRefWriter {
- public:
- XRefTableWriter(OutStream* outStrA);
- void startSection(int first, int count) override;
- void writeEntry(Goffset offset, int gen, XRefEntryType type) override;
- private:
- OutStream* outStr;
- };
-
- // XRefWriter subclass that writes a XRef stream
- class XRefStreamWriter: public XRefWriter {
- public:
- XRefStreamWriter(Array *index, GooString *stmBuf, int offsetSize);
- void startSection(int first, int count) override;
- void writeEntry(Goffset offset, int gen, XRefEntryType type) override;
- private:
- Array *index;
- GooString *stmBuf;
- int offsetSize;
- };
-
- // Dummy XRefWriter subclass that only checks if all offsets fit in 4 bytes
- class XRefPreScanWriter: public XRefWriter {
- public:
- XRefPreScanWriter();
- void startSection(int first, int count) override;
- void writeEntry(Goffset offset, int gen, XRefEntryType type) override;
-
- GBool hasOffsetsBeyond4GB;
- };
-
- void writeXRef(XRefWriter *writer, GBool writeAllEntries);
-};
-
-#endif