diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.26.4/poppler/Catalog.h')
-rw-r--r-- | Build/source/libs/poppler/poppler-0.26.4/poppler/Catalog.h | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/Build/source/libs/poppler/poppler-0.26.4/poppler/Catalog.h b/Build/source/libs/poppler/poppler-0.26.4/poppler/Catalog.h new file mode 100644 index 00000000000..bc9ce20b098 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.26.4/poppler/Catalog.h @@ -0,0 +1,272 @@ +//======================================================================== +// +// Catalog.h +// +// Copyright 1996-2007 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 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005, 2007, 2009-2011, 2013 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> +// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2013 Adrian Perez de Castro <aperez@igalia.com> +// Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2013 José Aliste <jaliste@src.gnome.org> +// +// 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 CATALOG_H +#define CATALOG_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "Object.h" +#include "goo/GooMutex.h" + +#include <vector> + +class PDFDoc; +class XRef; +class Object; +class Page; +class PageAttrs; +struct Ref; +class LinkDest; +class LinkAction; +class PageLabelInfo; +class Form; +class OCGs; +class ViewerPreferences; +class FileSpec; +class StructTreeRoot; + +//------------------------------------------------------------------------ +// NameTree +//------------------------------------------------------------------------ + +class NameTree { +public: + NameTree(); + ~NameTree(); + void init(XRef *xref, Object *tree); + GBool lookup(GooString *name, Object *obj); + int numEntries() { return length; }; + // iterator accessor, note it returns a shallow copy, do not free the object + Object getValue(int i); + GooString *getName(int i); + +private: + struct Entry { + Entry(Array *array, int index); + ~Entry(); + GooString name; + Object value; + void free(); + static int cmpEntry(const void *voidEntry, const void *voidOtherEntry); + static int cmp(const void *key, const void *entry); + }; + + void parse(Object *tree); + void addEntry(Entry *entry); + + XRef *xref; + Object *root; + Entry **entries; + int size, length; // size is the number of entries in + // the array of Entry* + // length is the number of real Entry +}; + +//------------------------------------------------------------------------ +// Catalog +//------------------------------------------------------------------------ + +class Catalog { +public: + + // Constructor. + Catalog(PDFDoc *docA); + + // Destructor. + ~Catalog(); + + // Is catalog valid? + GBool isOk() { return ok; } + + // Get number of pages. + int getNumPages(); + + // Get a page. + Page *getPage(int i); + + // Get the reference for a page object. + Ref *getPageRef(int i); + + // Return base URI, or NULL if none. + GooString *getBaseURI() { return baseURI; } + + // Return the contents of the metadata stream, or NULL if there is + // no metadata. + GooString *readMetadata(); + + // Return the structure tree root object. + StructTreeRoot *getStructTreeRoot(); + + // Return values from the MarkInfo dictionary as flags in a bitfield. + enum MarkInfoFlags { + markInfoNull = 1 << 0, + markInfoMarked = 1 << 1, + markInfoUserProperties = 1 << 2, + markInfoSuspects = 1 << 3, + }; + Guint getMarkInfo(); + + // Find a page, given its object ID. Returns page number, or 0 if + // not found. + int findPage(int num, int gen); + + // Find a named destination. Returns the link destination, or + // NULL if <name> is not a destination. + LinkDest *findDest(GooString *name); + + Object *getDests(); + + // Get the number of embedded files + int numEmbeddedFiles() { return getEmbeddedFileNameTree()->numEntries(); } + + // Get the i'th file embedded (at the Document level) in the document + FileSpec *embeddedFile(int i); + + // Get the number of javascript scripts + int numJS() { return getJSNameTree()->numEntries(); } + GooString *getJSName(int i) { return getJSNameTree()->getName(i); } + + // Get the i'th JavaScript script (at the Document level) in the document + GooString *getJS(int i); + + // Convert between page indices and page labels. + GBool labelToIndex(GooString *label, int *index); + GBool indexToLabel(int index, GooString *label); + + Object *getOutline(); + + Object *getAcroForm() { return &acroForm; } + + OCGs *getOptContentConfig() { return optContent; } + + enum FormType + { + NoForm, + AcroForm, + XfaForm + }; + + FormType getFormType(); + Form* getForm(); + + ViewerPreferences *getViewerPreferences(); + + enum PageMode { + pageModeNone, + pageModeOutlines, + pageModeThumbs, + pageModeFullScreen, + pageModeOC, + pageModeAttach, + pageModeNull + }; + enum PageLayout { + pageLayoutNone, + pageLayoutSinglePage, + pageLayoutOneColumn, + pageLayoutTwoColumnLeft, + pageLayoutTwoColumnRight, + pageLayoutTwoPageLeft, + pageLayoutTwoPageRight, + pageLayoutNull + }; + + // Returns the page mode. + PageMode getPageMode(); + PageLayout getPageLayout(); + + enum DocumentAdditionalActionsType { + actionCloseDocument, ///< Performed before closing the document + actionSaveDocumentStart, ///< Performed before saving the document + actionSaveDocumentFinish, ///< Performed after saving the document + actionPrintDocumentStart, ///< Performed before printing the document + actionPrintDocumentFinish, ///< Performed after printing the document + }; + + LinkAction *getAdditionalAction(DocumentAdditionalActionsType type); + +private: + + // Get page label info. + PageLabelInfo *getPageLabelInfo(); + + PDFDoc *doc; + XRef *xref; // the xref table for this PDF file + Page **pages; // array of pages + Ref *pageRefs; // object ID for each page + int lastCachedPage; + std::vector<Dict *> *pagesList; + std::vector<Ref> *pagesRefList; + std::vector<PageAttrs *> *attrsList; + std::vector<int> *kidsIdxList; + Form *form; + ViewerPreferences *viewerPrefs; + int numPages; // number of pages + int pagesSize; // size of pages array + Object dests; // named destination dictionary + Object names; // named names dictionary + NameTree *destNameTree; // named destination name-tree + NameTree *embeddedFileNameTree; // embedded file name-tree + NameTree *jsNameTree; // Java Script name-tree + GooString *baseURI; // base URI for URI-type links + Object metadata; // metadata stream + StructTreeRoot *structTreeRoot; // structure tree root + Guint markInfo; // Flags from MarkInfo dictionary + Object outline; // outline dictionary + Object acroForm; // AcroForm dictionary + Object viewerPreferences; // ViewerPreference dictionary + OCGs *optContent; // Optional Content groups + GBool ok; // true if catalog is valid + PageLabelInfo *pageLabelInfo; // info about page labels + PageMode pageMode; // page mode + PageLayout pageLayout; // page layout + Object additionalActions; // page additional actions + + GBool cachePageTree(int page); // Cache first <page> pages. + Object *findDestInTree(Object *tree, GooString *name, Object *obj); + + Object *getNames(); + NameTree *getDestNameTree(); + NameTree *getEmbeddedFileNameTree(); + NameTree *getJSNameTree(); +#if MULTITHREADED + GooMutex mutex; +#endif + +}; + +#endif |