1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_OBJECTS_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FPDF_OBJECTS_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FXCRT_EXTENSION_
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fxcrt/fx_ext.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Document;
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_IndirectObjects;
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Null;
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Boolean;
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Number;
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_String;
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Stream;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamAcc;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamFilter;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Array;
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Dictionary;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Reference;
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_DocParser;
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FileRead;
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_CryptoHandler;
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_INVALID		0
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define	PDFOBJ_BOOLEAN		1
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_NUMBER		2
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_STRING		3
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_NAME			4
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_ARRAY		5
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_DICTIONARY	6
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_STREAM		7
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_NULL			8
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFOBJ_REFERENCE	9
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream *pStream, FX_LPVOID pUserData);
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Object : public CFX_Object
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetType() const
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_Type;
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetObjNum() const
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ObjNum;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					IsIdentical(CPDF_Object* pObj) const;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			Clone(FX_BOOL bDirect = FALSE) const;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			CloneRef(CPDF_IndirectObjects* pObjs) const;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetDirect() const;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					Release();
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			GetString() const;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC			GetConstString() const;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_WideString			GetUnicodeText(CFX_CharMap* pCharMap = NULL) const;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetNumber() const;
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetNumber16() const;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetInteger() const;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		GetDict() const;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array*				GetArray() const;
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetString(const CFX_ByteString& str);
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetUnicodeText(FX_LPCWSTR pUnicodes, int len = -1);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetDirectType() const;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					IsModified() const
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FALSE;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_Type;
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object()
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_ObjNum = 0;
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD 				m_ObjNum;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					Destroy();
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Object() {}
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_IndirectObjects;
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Parser;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_SyntaxParser;
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object(const CPDF_Object& src) {}
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Boolean : public CPDF_Object
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Boolean*	Create(FX_BOOL value)
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Boolean(value);
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Boolean()
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_BOOLEAN;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Boolean(FX_BOOL value)
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_BOOLEAN;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_bValue = value;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Boolean* pOther) const
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bValue == pOther->m_bValue;
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					m_bValue;
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Number : public CPDF_Object
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Number*		Create(int value)
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Number(value);
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Number*		Create(FX_FLOAT value)
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Number(value);
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Number*		Create(FX_BSTR str)
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Number(str);
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Number*		Create(FX_BOOL bInteger, void* pData)
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Number(bInteger, pData);
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Number()
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_NUMBER;
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Number(FX_BOOL bInteger, void* pData);
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Number(int value);
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Number(FX_FLOAT value);
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Number(FX_BSTR str);
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Number* pOther) const;
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			GetString() const;
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetString(FX_BSTR str);
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					IsInteger() const
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bInteger;
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetInteger() const
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bInteger ? m_Integer : (int)m_Float;
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetNumber() const
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetNumber(FX_FLOAT value);
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			GetNumber16() const
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return GetNumber();
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetFloat() const
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					m_bInteger;
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    union {
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        int					m_Integer;
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT			m_Float;
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    };
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_String : public CPDF_Object
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_String*		Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE)
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_String(str, bHex);
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_String*		Create(const CFX_WideString& str)
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_String(str);
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_String()
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_STRING;
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_bHex = FALSE;
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE) : m_String(str)
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_STRING;
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_bHex = bHex;
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_String(const CFX_WideString& str);
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString&			GetString()
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_String;
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_String* pOther) const
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_String == pOther->m_String;
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					IsHex() const
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bHex;
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			m_String;
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					m_bHex;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Name : public CPDF_Object
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Name*		Create(const CFX_ByteString& str)
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Name(str);
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Name*		Create(FX_BSTR str)
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Name(str);
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Name*		Create(FX_LPCSTR str)
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Name(str);
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Name(const CFX_ByteString& str) : m_Name(str)
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_NAME;
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Name(FX_BSTR str) : m_Name(str)
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_NAME;
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Name(FX_LPCSTR str) : m_Name(str)
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_NAME;
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString&			GetString()
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_Name;
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Name* pOther) const
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_Name == pOther->m_Name;
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			m_Name;
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Array : public CPDF_Object
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Array*		Create()
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Array();
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array()
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_ARRAY;
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetCount() const
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_Objects.GetSize();
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetElement(FX_DWORD index) const;
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetElementValue(FX_DWORD index) const;
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_AffineMatrix		GetMatrix();
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect			GetRect();
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			GetString(FX_DWORD index) const;
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC			GetConstString(FX_DWORD index) const;
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetInteger(FX_DWORD index) const;
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetNumber(FX_DWORD index) const;
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		GetDict(FX_DWORD index) const;
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream*			GetStream(FX_DWORD index) const;
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array*				GetArray(FX_DWORD index) const;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetFloat(FX_DWORD index) const
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return GetNumber(index);
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					InsertAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					RemoveAt(FX_DWORD index);
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddNumber(FX_FLOAT f);
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddInteger(int i);
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddString(const CFX_ByteString& str);
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddName(const CFX_ByteString& str);
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        AddReference(pDoc, obj->GetObjNum());
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			GetNumber16(FX_DWORD index) const
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return GetNumber(index);
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddNumber16(FX_FLOAT value)
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        AddNumber(value);
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Array* pOther) const;
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Array();
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_PtrArray			m_Objects;
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Dictionary : public CPDF_Object
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Dictionary*	Create()
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Dictionary();
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary()
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_DICTIONARY;
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetElement(FX_BSTR key) const;
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetElementValue(FX_BSTR key) const;
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			GetString(FX_BSTR key) const;
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC			GetConstString(FX_BSTR key) const;
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			GetString(FX_BSTR key, FX_BSTR default_str) const;
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC			GetConstString(FX_BSTR key, FX_BSTR default_str) const;
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_WideString			GetUnicodeText(FX_BSTR key, CFX_CharMap* pCharMap = NULL) const;
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetInteger(FX_BSTR key) const;
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetInteger(FX_BSTR key, int default_int) const;
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					GetBoolean(FX_BSTR key, FX_BOOL bDefault = FALSE) const;
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetNumber(FX_BSTR key) const;
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		GetDict(FX_BSTR key) const;
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream*			GetStream(FX_BSTR key) const;
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array*				GetArray(FX_BSTR key) const;
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect			GetRect(FX_BSTR key) const;
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_AffineMatrix		GetMatrix(FX_BSTR key) const;
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT				GetFloat(FX_BSTR key) const
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return GetNumber(key);
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					KeyExist(FX_BSTR key) const;
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION				GetStartPos() const;
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const;
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAt(FX_BSTR key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtName(FX_BSTR key, const CFX_ByteString& name);
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtString(FX_BSTR key, const CFX_ByteString& string);
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtInteger(FX_BSTR key, int i);
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtNumber(FX_BSTR key, FX_FLOAT f);
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        SetAtReference(key, pDoc, obj->GetObjNum());
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        AddReference(key, pDoc, obj->GetObjNum());
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtRect(FX_BSTR key, const CFX_FloatRect& rect);
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtMatrix(FX_BSTR key, const CFX_AffineMatrix& matrix);
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetAtBoolean(FX_BSTR key, FX_BOOL bValue);
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					RemoveAt(FX_BSTR key);
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					ReplaceKey(FX_BSTR oldkey, FX_BSTR newkey);
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Dictionary* pDict) const;
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetCount() const
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_Map.GetCount();
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					AddValue(FX_BSTR key, CPDF_Object* pObj);
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Dictionary();
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_CMapByteStringToPtr	m_Map;
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Stream : public CPDF_Object
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Stream*		Create(FX_LPBYTE pData, FX_DWORD size, CPDF_Dictionary* pDict)
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Stream(pData, size, pDict);
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream(FX_LPBYTE pData, FX_DWORD size, CPDF_Dictionary* pDict);
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		GetDict() const
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pDict;
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetData(FX_LPCBYTE pData, FX_DWORD size, FX_BOOL bCompressed, FX_BOOL bKeepBuf);
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					InitStream(FX_BYTE* pData, FX_DWORD size, CPDF_Dictionary* pDict);
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					InitStream(IFX_FileRead *pFile, CPDF_Dictionary* pDict);
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Stream* pOther) const;
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_StreamFilter*		GetStreamFilter(FX_BOOL bRaw = FALSE) const;
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetRawSize() const
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_dwSize;
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					ReadRawData(FX_FILESIZE start_pos, FX_LPBYTE pBuf, FX_DWORD buf_size) const;
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					IsMemoryBased() const
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_GenNum == (FX_DWORD) - 1;
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream*			Clone(FX_BOOL bDirect, FPDF_LPFCloneStreamCallback lpfCallback, FX_LPVOID pUserData) const;
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Stream();
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		m_pDict;
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_dwSize;
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_GenNum;
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    union {
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_LPBYTE			m_pDataBuf;
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IFX_FileRead*		m_pFile;
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    };
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FILESIZE				m_FileOffset;
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_CryptoHandler*		m_pCryptoHandler;
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					InitStream(CPDF_Dictionary* pDict);
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_StreamAcc;
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_AttachmentAcc;
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamAcc : public CFX_Object
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_StreamAcc();
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_StreamAcc();
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess = FALSE,
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                        FX_DWORD estimated_size = 0, FX_BOOL bImageAcc = FALSE);
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CPDF_Stream*		GetStream() const
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pStream;
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		GetDict() const
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pStream->GetDict();
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_LPCBYTE				GetData() const;
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetSize() const;
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_LPBYTE				DetachData();
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CFX_ByteString&	GetImageDecoder()
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ImageDecoder;
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CPDF_Dictionary*	GetImageParam()
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pImageParam;
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_LPBYTE				m_pData;
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_dwSize;
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					m_bNewBuf;
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString			m_ImageDecoder;
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*		m_pImageParam;
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CPDF_Stream*		m_pStream;
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_LPBYTE				m_pSrcData;
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_DataFilter* FPDF_CreateFilter(FX_BSTR name, const CPDF_Dictionary* pParam, int width = 0, int height = 0);
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDF_FILTER_BUFFER_SIZE		20480
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamFilter : public CFX_Object
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_StreamFilter();
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			ReadBlock(FX_LPBYTE buffer, FX_DWORD size);
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			GetSrcPos()
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_SrcOffset;
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CPDF_Stream*	GetStream()
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pStream;
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_StreamFilter() {}
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			ReadLeftOver(FX_LPBYTE buffer, FX_DWORD buf_size);
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CPDF_Stream*	m_pStream;
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_DataFilter*		m_pFilter;
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_BinaryBuf*		m_pBuffer;
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			m_BufOffset;
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			m_SrcOffset;
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BYTE				m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE];
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class CPDF_Stream;
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Null : public CPDF_Object
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Null*		Create()
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Null();
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Null()
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_NULL;
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Reference : public CPDF_Object
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_Reference*	Create(CPDF_IndirectObjects* pDoc, int objnum)
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FX_NEW CPDF_Reference(pDoc, objnum);
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum)
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Type = PDFOBJ_REFERENCE;
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pObjList = pDoc;
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_RefObjNum = objnum;
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_IndirectObjects*	GetObjList() const
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pObjList;
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetRefObjNum() const
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_RefObjNum;
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL					Identical(CPDF_Reference* pOther) const
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_RefObjNum == pOther->m_RefObjNum;
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_IndirectObjects*	m_pObjList;
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_RefObjNum;
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class			CPDF_Object;
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_IndirectObjects : public CFX_Object
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_IndirectObjects(IPDF_DocParser* pParser);
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_IndirectObjects();
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*			GetIndirectObject(FX_DWORD objnum, struct PARSE_CONTEXT* pContext = NULL);
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int						GetIndirectType(FX_DWORD objnum);
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				AddIndirectObject(CPDF_Object* pObj);
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					ReleaseIndirectObject(FX_DWORD objnum);
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				GetLastObjNum() const;
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION				GetStartPosition() const
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_IndirectObjs.GetStartPosition();
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					GetNextAssoc(FX_POSITION& rPos, FX_DWORD& objnum, CPDF_Object*& pObject) const
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject);
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_MapPtrToPtr			m_IndirectObjs;
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    IPDF_DocParser*			m_pParser;
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD				m_LastObjNum;
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
786