1 | //======================================================================== |
2 | // |
3 | // Hints.h |
4 | // |
5 | // This file is licensed under the GPLv2 or later |
6 | // |
7 | // Copyright 2010 Hib Eris <hib@hiberis.nl> |
8 | // Copyright 2010, 2013, 2016, 2018 Albert Astals Cid <aacid@kde.org> |
9 | // Copyright 2013 Adrian Johnson <ajohnson@redneon.com> |
10 | // |
11 | //======================================================================== |
12 | |
13 | #ifndef HINTS_H |
14 | #define HINTS_H |
15 | |
16 | #include <cstring> |
17 | #include <vector> |
18 | #include "PDFDoc.h" |
19 | |
20 | class Stream; |
21 | class BaseStream; |
22 | class Linearization; |
23 | class XRef; |
24 | |
25 | //------------------------------------------------------------------------ |
26 | // Hints |
27 | //------------------------------------------------------------------------ |
28 | |
29 | class Hints |
30 | { |
31 | public: |
32 | Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); |
33 | ~Hints(); |
34 | |
35 | Hints(const Hints &) = delete; |
36 | Hints &operator=(const Hints &) = delete; |
37 | |
38 | bool isOk() const; |
39 | |
40 | int getPageObjectNum(int page); |
41 | Goffset getPageOffset(int page); |
42 | |
43 | private: |
44 | void readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); |
45 | bool readPageOffsetTable(Stream *str); |
46 | bool readSharedObjectsTable(Stream *str); |
47 | |
48 | unsigned int hintsOffset; |
49 | unsigned int hintsLength; |
50 | unsigned int hintsOffset2; |
51 | unsigned int hintsLength2; |
52 | unsigned int mainXRefEntriesOffset; |
53 | |
54 | int nPages; |
55 | int pageFirst; |
56 | int pageObjectFirst; |
57 | Goffset pageOffsetFirst; |
58 | unsigned int pageEndFirst; |
59 | |
60 | unsigned int nObjectLeast; |
61 | unsigned int objectOffsetFirst; |
62 | unsigned int nBitsDiffObjects; |
63 | unsigned int pageLengthLeast; |
64 | unsigned int nBitsDiffPageLength; |
65 | unsigned int OffsetStreamLeast; |
66 | unsigned int nBitsOffsetStream; |
67 | unsigned int lengthStreamLeast; |
68 | unsigned int nBitsLengthStream; |
69 | unsigned int nBitsNumShared; |
70 | unsigned int nBitsShared; |
71 | unsigned int nBitsNumerator; |
72 | unsigned int denominator; |
73 | |
74 | unsigned int *nObjects; |
75 | int *pageObjectNum; |
76 | unsigned int *xRefOffset; |
77 | unsigned int *pageLength; |
78 | Goffset *pageOffset; |
79 | unsigned int *numSharedObject; |
80 | unsigned int **sharedObjectId; |
81 | |
82 | unsigned int *groupLength; |
83 | unsigned int *groupOffset; |
84 | unsigned int *groupHasSignature; |
85 | unsigned int *groupNumObjects; |
86 | unsigned int *groupXRefOffset; |
87 | bool ok; |
88 | }; |
89 | |
90 | #endif |
91 | |