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