diff options
Diffstat (limited to 'core/include/fpdfapi/fpdf_objects.h')
-rw-r--r-- | core/include/fpdfapi/fpdf_objects.h | 884 |
1 files changed, 374 insertions, 510 deletions
diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h index 45b7cc63cb..250b6e00d8 100644 --- a/core/include/fpdfapi/fpdf_objects.h +++ b/core/include/fpdfapi/fpdf_objects.h @@ -26,718 +26,582 @@ class CPDF_StreamFilter; class CPDF_String; class IFX_FileRead; -#define PDFOBJ_INVALID 0 -#define PDFOBJ_BOOLEAN 1 -#define PDFOBJ_NUMBER 2 -#define PDFOBJ_STRING 3 -#define PDFOBJ_NAME 4 -#define PDFOBJ_ARRAY 5 -#define PDFOBJ_DICTIONARY 6 -#define PDFOBJ_STREAM 7 -#define PDFOBJ_NULL 8 -#define PDFOBJ_REFERENCE 9 +#define PDFOBJ_INVALID 0 +#define PDFOBJ_BOOLEAN 1 +#define PDFOBJ_NUMBER 2 +#define PDFOBJ_STRING 3 +#define PDFOBJ_NAME 4 +#define PDFOBJ_ARRAY 5 +#define PDFOBJ_DICTIONARY 6 +#define PDFOBJ_STREAM 7 +#define PDFOBJ_NULL 8 +#define PDFOBJ_REFERENCE 9 -typedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream *pStream, void* pUserData); -class CPDF_Object -{ -public: +typedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream* pStream, + void* pUserData); +class CPDF_Object { + public: + int GetType() const { return m_Type; } - int GetType() const - { - return m_Type; - } + FX_DWORD GetObjNum() const { return m_ObjNum; } - FX_DWORD GetObjNum() const - { - return m_ObjNum; - } + FX_DWORD GetGenNum() const { return m_GenNum; } - FX_DWORD GetGenNum() const - { - return m_GenNum; - } + FX_BOOL IsIdentical(CPDF_Object* pObj) const; - FX_BOOL IsIdentical(CPDF_Object* pObj) const; + CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const; - CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const; + CPDF_Object* CloneRef(CPDF_IndirectObjects* pObjs) const; - CPDF_Object* CloneRef(CPDF_IndirectObjects* pObjs) const; + CPDF_Object* GetDirect() const; - CPDF_Object* GetDirect() const; + void Release(); - void Release(); + CFX_ByteString GetString() const; - CFX_ByteString GetString() const; + CFX_ByteStringC GetConstString() const; - CFX_ByteStringC GetConstString() const; + CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const; + FX_FLOAT GetNumber() const; - CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const; - FX_FLOAT GetNumber() const; + FX_FLOAT GetNumber16() const; - FX_FLOAT GetNumber16() const; + int GetInteger() const; - int GetInteger() const; + CPDF_Dictionary* GetDict() const; - CPDF_Dictionary* GetDict() const; + CPDF_Array* GetArray() const; - CPDF_Array* GetArray() const; + void SetString(const CFX_ByteString& str); - void SetString(const CFX_ByteString& str); + void SetUnicodeText(const FX_WCHAR* pUnicodes, int len = -1); - void SetUnicodeText(const FX_WCHAR* pUnicodes, int len = -1); + int GetDirectType() const; - int GetDirectType() const; + FX_BOOL IsModified() const { return FALSE; } - FX_BOOL IsModified() const - { - return FALSE; - } -protected: - CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) { } - ~CPDF_Object() { } - void Destroy(); + protected: + CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) {} + ~CPDF_Object() {} + void Destroy(); - static const int OBJECT_REF_MAX_DEPTH = 128; - static int s_nCurRefDepth; - FX_DWORD m_Type; - FX_DWORD m_ObjNum; - FX_DWORD m_GenNum; + static const int OBJECT_REF_MAX_DEPTH = 128; + static int s_nCurRefDepth; + FX_DWORD m_Type; + FX_DWORD m_ObjNum; + FX_DWORD m_GenNum; - friend class CPDF_IndirectObjects; - friend class CPDF_Parser; - friend class CPDF_SyntaxParser; -private: - CPDF_Object(const CPDF_Object& src) {} - CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const; -}; -class CPDF_Boolean : public CPDF_Object -{ -public: - - static CPDF_Boolean* Create(FX_BOOL value) - { - return new CPDF_Boolean(value); - } - - CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) { } - CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) { } - - FX_BOOL Identical(CPDF_Boolean* pOther) const - { - return m_bValue == pOther->m_bValue; - } -protected: - - FX_BOOL m_bValue; - friend class CPDF_Object; + friend class CPDF_IndirectObjects; + friend class CPDF_Parser; + friend class CPDF_SyntaxParser; + + private: + CPDF_Object(const CPDF_Object& src) {} + CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const; }; -class CPDF_Number : public CPDF_Object -{ -public: +class CPDF_Boolean : public CPDF_Object { + public: + static CPDF_Boolean* Create(FX_BOOL value) { return new CPDF_Boolean(value); } - static CPDF_Number* Create(int value) - { - return new CPDF_Number(value); - } + CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) {} + CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) {} - static CPDF_Number* Create(FX_FLOAT value) - { - return new CPDF_Number(value); - } + FX_BOOL Identical(CPDF_Boolean* pOther) const { + return m_bValue == pOther->m_bValue; + } - static CPDF_Number* Create(const CFX_ByteStringC& str) - { - return new CPDF_Number(str); - } + protected: + FX_BOOL m_bValue; + friend class CPDF_Object; +}; +class CPDF_Number : public CPDF_Object { + public: + static CPDF_Number* Create(int value) { return new CPDF_Number(value); } - static CPDF_Number* Create(FX_BOOL bInteger, void* pData) - { - return new CPDF_Number(bInteger, pData); - } + static CPDF_Number* Create(FX_FLOAT value) { return new CPDF_Number(value); } - CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) { } + static CPDF_Number* Create(const CFX_ByteStringC& str) { + return new CPDF_Number(str); + } - CPDF_Number(FX_BOOL bInteger, void* pData); + static CPDF_Number* Create(FX_BOOL bInteger, void* pData) { + return new CPDF_Number(bInteger, pData); + } - CPDF_Number(int value); + CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) {} - CPDF_Number(FX_FLOAT value); + CPDF_Number(FX_BOOL bInteger, void* pData); - CPDF_Number(const CFX_ByteStringC& str); + CPDF_Number(int value); - FX_BOOL Identical(CPDF_Number* pOther) const; + CPDF_Number(FX_FLOAT value); - CFX_ByteString GetString() const; + CPDF_Number(const CFX_ByteStringC& str); - void SetString(const CFX_ByteStringC& str); + FX_BOOL Identical(CPDF_Number* pOther) const; - FX_BOOL IsInteger() const - { - return m_bInteger; - } + CFX_ByteString GetString() const; - int GetInteger() const - { - return m_bInteger ? m_Integer : (int)m_Float; - } + void SetString(const CFX_ByteStringC& str); - FX_FLOAT GetNumber() const - { - return m_bInteger ? (FX_FLOAT)m_Integer : m_Float; - } + FX_BOOL IsInteger() const { return m_bInteger; } - void SetNumber(FX_FLOAT value); + int GetInteger() const { return m_bInteger ? m_Integer : (int)m_Float; } - FX_FLOAT GetNumber16() const - { - return GetNumber(); - } + FX_FLOAT GetNumber() const { + return m_bInteger ? (FX_FLOAT)m_Integer : m_Float; + } - FX_FLOAT GetFloat() const - { - return m_bInteger ? (FX_FLOAT)m_Integer : m_Float; - } -protected: + void SetNumber(FX_FLOAT value); - FX_BOOL m_bInteger; + FX_FLOAT GetNumber16() const { return GetNumber(); } - union { + FX_FLOAT GetFloat() const { + return m_bInteger ? (FX_FLOAT)m_Integer : m_Float; + } - int m_Integer; + protected: + FX_BOOL m_bInteger; - FX_FLOAT m_Float; - }; - friend class CPDF_Object; -}; -class CPDF_String : public CPDF_Object -{ -public: + union { + int m_Integer; - static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE) - { - return new CPDF_String(str, bHex); - } + FX_FLOAT m_Float; + }; + friend class CPDF_Object; +}; +class CPDF_String : public CPDF_Object { + public: + static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE) { + return new CPDF_String(str, bHex); + } - static CPDF_String* Create(const CFX_WideString& str) - { - return new CPDF_String(str); - } + static CPDF_String* Create(const CFX_WideString& str) { + return new CPDF_String(str); + } - CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) { } + CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {} - CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE) - : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) { - } + CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE) + : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) {} - CPDF_String(const CFX_WideString& str); + CPDF_String(const CFX_WideString& str); - CFX_ByteString& GetString() - { - return m_String; - } + CFX_ByteString& GetString() { return m_String; } - FX_BOOL Identical(CPDF_String* pOther) const - { - return m_String == pOther->m_String; - } + FX_BOOL Identical(CPDF_String* pOther) const { + return m_String == pOther->m_String; + } - FX_BOOL IsHex() const - { - return m_bHex; - } -protected: + FX_BOOL IsHex() const { return m_bHex; } - CFX_ByteString m_String; + protected: + CFX_ByteString m_String; - FX_BOOL m_bHex; - friend class CPDF_Object; + FX_BOOL m_bHex; + friend class CPDF_Object; }; -class CPDF_Name : public CPDF_Object -{ -public: - - static CPDF_Name* Create(const CFX_ByteString& str) - { - return new CPDF_Name(str); - } - - static CPDF_Name* Create(const CFX_ByteStringC& str) - { - return new CPDF_Name(str); - } - - static CPDF_Name* Create(const FX_CHAR* str) - { - return new CPDF_Name(str); - } - - CPDF_Name(const CFX_ByteString& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { } - CPDF_Name(const CFX_ByteStringC& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { } - CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { } - - CFX_ByteString& GetString() - { - return m_Name; - } - - FX_BOOL Identical(CPDF_Name* pOther) const - { - return m_Name == pOther->m_Name; - } -protected: - - CFX_ByteString m_Name; - friend class CPDF_Object; -}; -class CPDF_Array : public CPDF_Object -{ -public: - - static CPDF_Array* Create() - { - return new CPDF_Array(); - } - - CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) { } - - FX_DWORD GetCount() const - { - return m_Objects.GetSize(); - } - - CPDF_Object* GetElement(FX_DWORD index) const; +class CPDF_Name : public CPDF_Object { + public: + static CPDF_Name* Create(const CFX_ByteString& str) { + return new CPDF_Name(str); + } - CPDF_Object* GetElementValue(FX_DWORD index) const; + static CPDF_Name* Create(const CFX_ByteStringC& str) { + return new CPDF_Name(str); + } + static CPDF_Name* Create(const FX_CHAR* str) { return new CPDF_Name(str); } + CPDF_Name(const CFX_ByteString& str) + : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} + CPDF_Name(const CFX_ByteStringC& str) + : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} + CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} - CFX_AffineMatrix GetMatrix(); + CFX_ByteString& GetString() { return m_Name; } - CFX_FloatRect GetRect(); + FX_BOOL Identical(CPDF_Name* pOther) const { + return m_Name == pOther->m_Name; + } + protected: + CFX_ByteString m_Name; + friend class CPDF_Object; +}; +class CPDF_Array : public CPDF_Object { + public: + static CPDF_Array* Create() { return new CPDF_Array(); } + CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) {} + FX_DWORD GetCount() const { return m_Objects.GetSize(); } - CFX_ByteString GetString(FX_DWORD index) const; - - CFX_ByteStringC GetConstString(FX_DWORD index) const; - - int GetInteger(FX_DWORD index) const; - - FX_FLOAT GetNumber(FX_DWORD index) const; - - CPDF_Dictionary* GetDict(FX_DWORD index) const; + CPDF_Object* GetElement(FX_DWORD index) const; - CPDF_Stream* GetStream(FX_DWORD index) const; + CPDF_Object* GetElementValue(FX_DWORD index) const; - CPDF_Array* GetArray(FX_DWORD index) const; + CFX_AffineMatrix GetMatrix(); - FX_FLOAT GetFloat(FX_DWORD index) const - { - return GetNumber(index); - } + CFX_FloatRect GetRect(); + CFX_ByteString GetString(FX_DWORD index) const; + CFX_ByteStringC GetConstString(FX_DWORD index) const; + int GetInteger(FX_DWORD index) const; - void SetAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); + FX_FLOAT GetNumber(FX_DWORD index) const; + CPDF_Dictionary* GetDict(FX_DWORD index) const; - void InsertAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); + CPDF_Stream* GetStream(FX_DWORD index) const; - void RemoveAt(FX_DWORD index); + CPDF_Array* GetArray(FX_DWORD index) const; + FX_FLOAT GetFloat(FX_DWORD index) const { return GetNumber(index); } - void Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); + void SetAt(FX_DWORD index, + CPDF_Object* pObj, + CPDF_IndirectObjects* pObjs = NULL); + void InsertAt(FX_DWORD index, + CPDF_Object* pObj, + CPDF_IndirectObjects* pObjs = NULL); + void RemoveAt(FX_DWORD index); - void AddNumber(FX_FLOAT f); + void Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); - void AddInteger(int i); + void AddNumber(FX_FLOAT f); - void AddString(const CFX_ByteString& str); + void AddInteger(int i); - void AddName(const CFX_ByteString& str); + void AddString(const CFX_ByteString& str); - void AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); + void AddName(const CFX_ByteString& str); - void AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj) - { - AddReference(pDoc, obj->GetObjNum()); - } + void AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); + void AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj) { + AddReference(pDoc, obj->GetObjNum()); + } - FX_FLOAT GetNumber16(FX_DWORD index) const - { - return GetNumber(index); - } + FX_FLOAT GetNumber16(FX_DWORD index) const { return GetNumber(index); } - void AddNumber16(FX_FLOAT value) - { - AddNumber(value); - } + void AddNumber16(FX_FLOAT value) { AddNumber(value); } - FX_BOOL Identical(CPDF_Array* pOther) const; -protected: + FX_BOOL Identical(CPDF_Array* pOther) const; - ~CPDF_Array(); + protected: + ~CPDF_Array(); - CFX_PtrArray m_Objects; - friend class CPDF_Object; + CFX_PtrArray m_Objects; + friend class CPDF_Object; }; -class CPDF_Dictionary : public CPDF_Object -{ -public: +class CPDF_Dictionary : public CPDF_Object { + public: + static CPDF_Dictionary* Create() { return new CPDF_Dictionary(); } - static CPDF_Dictionary* Create() - { - return new CPDF_Dictionary(); - } + CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) {} - CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) { } + CPDF_Object* GetElement(const CFX_ByteStringC& key) const; - CPDF_Object* GetElement(const CFX_ByteStringC& key) const; + CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const; - CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const; + CFX_ByteString GetString(const CFX_ByteStringC& key) const; + CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const; + CFX_ByteString GetString(const CFX_ByteStringC& key, + const CFX_ByteStringC& default_str) const; + CFX_ByteStringC GetConstString(const CFX_ByteStringC& key, + const CFX_ByteStringC& default_str) const; + CFX_WideString GetUnicodeText(const CFX_ByteStringC& key, + CFX_CharMap* pCharMap = NULL) const; - CFX_ByteString GetString(const CFX_ByteStringC& key) const; + int GetInteger(const CFX_ByteStringC& key) const; - CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const; + int GetInteger(const CFX_ByteStringC& key, int default_int) const; - CFX_ByteString GetString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const; + FX_BOOL GetBoolean(const CFX_ByteStringC& key, + FX_BOOL bDefault = FALSE) const; - CFX_ByteStringC GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const; + FX_FLOAT GetNumber(const CFX_ByteStringC& key) const; - CFX_WideString GetUnicodeText(const CFX_ByteStringC& key, CFX_CharMap* pCharMap = NULL) const; + CPDF_Dictionary* GetDict(const CFX_ByteStringC& key) const; - int GetInteger(const CFX_ByteStringC& key) const; + CPDF_Stream* GetStream(const CFX_ByteStringC& key) const; - int GetInteger(const CFX_ByteStringC& key, int default_int) const; + CPDF_Array* GetArray(const CFX_ByteStringC& key) const; - FX_BOOL GetBoolean(const CFX_ByteStringC& key, FX_BOOL bDefault = FALSE) const; + CFX_FloatRect GetRect(const CFX_ByteStringC& key) const; - FX_FLOAT GetNumber(const CFX_ByteStringC& key) const; + CFX_AffineMatrix GetMatrix(const CFX_ByteStringC& key) const; - CPDF_Dictionary* GetDict(const CFX_ByteStringC& key) const; + FX_FLOAT GetFloat(const CFX_ByteStringC& key) const { return GetNumber(key); } - CPDF_Stream* GetStream(const CFX_ByteStringC& key) const; + FX_BOOL KeyExist(const CFX_ByteStringC& key) const; - CPDF_Array* GetArray(const CFX_ByteStringC& key) const; + FX_POSITION GetStartPos() const; - CFX_FloatRect GetRect(const CFX_ByteStringC& key) const; + CPDF_Object* GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const; - CFX_AffineMatrix GetMatrix(const CFX_ByteStringC& key) const; + void SetAt(const CFX_ByteStringC& key, + CPDF_Object* pObj, + CPDF_IndirectObjects* pObjs = NULL); - FX_FLOAT GetFloat(const CFX_ByteStringC& key) const - { - return GetNumber(key); - } + void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name); + void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string); - FX_BOOL KeyExist(const CFX_ByteStringC& key) const; + void SetAtInteger(const CFX_ByteStringC& key, int i); - FX_POSITION GetStartPos() const; + void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f); - CPDF_Object* GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const; + void SetAtReference(const CFX_ByteStringC& key, + CPDF_IndirectObjects* pDoc, + FX_DWORD objnum); - void SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); + void SetAtReference(const CFX_ByteStringC& key, + CPDF_IndirectObjects* pDoc, + CPDF_Object* obj) { + SetAtReference(key, pDoc, obj->GetObjNum()); + } + void AddReference(const CFX_ByteStringC& key, + CPDF_IndirectObjects* pDoc, + FX_DWORD objnum); + void AddReference(const CFX_ByteStringC& key, + CPDF_IndirectObjects* pDoc, + CPDF_Object* obj) { + AddReference(key, pDoc, obj->GetObjNum()); + } - void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name); + void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect); + void SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix); - void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string); + void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue); + void RemoveAt(const CFX_ByteStringC& key); - void SetAtInteger(const CFX_ByteStringC& key, int i); + void ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey); + FX_BOOL Identical(CPDF_Dictionary* pDict) const; - void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f); + int GetCount() const { return m_Map.GetCount(); } - void SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum); + void AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj); - void SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj) - { - SetAtReference(key, pDoc, obj->GetObjNum()); - } + protected: + ~CPDF_Dictionary(); - void AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum); + CFX_CMapByteStringToPtr m_Map; - void AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj) - { - AddReference(key, pDoc, obj->GetObjNum()); - } - - void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect); - - void SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix); - - void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue); + friend class CPDF_Object; +}; +class CPDF_Stream : public CPDF_Object { + public: + static CPDF_Stream* Create(uint8_t* pData, + FX_DWORD size, + CPDF_Dictionary* pDict) { + return new CPDF_Stream(pData, size, pDict); + } + CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict); + CPDF_Dictionary* GetDict() const { return m_pDict; } - void RemoveAt(const CFX_ByteStringC& key); + void SetData(const uint8_t* pData, + FX_DWORD size, + FX_BOOL bCompressed, + FX_BOOL bKeepBuf); + void InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict); - void ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey); + void InitStream(IFX_FileRead* pFile, CPDF_Dictionary* pDict); - FX_BOOL Identical(CPDF_Dictionary* pDict) const; + FX_BOOL Identical(CPDF_Stream* pOther) const; - int GetCount() const - { - return m_Map.GetCount(); - } + CPDF_StreamFilter* GetStreamFilter(FX_BOOL bRaw = FALSE) const; - void AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj); -protected: + FX_DWORD GetRawSize() const { return m_dwSize; } - ~CPDF_Dictionary(); + FX_BOOL ReadRawData(FX_FILESIZE start_pos, + uint8_t* pBuf, + FX_DWORD buf_size) const; - CFX_CMapByteStringToPtr m_Map; + FX_BOOL IsMemoryBased() const { return m_GenNum == (FX_DWORD)-1; } - friend class CPDF_Object; -}; -class CPDF_Stream : public CPDF_Object -{ -public: + CPDF_Stream* Clone(FX_BOOL bDirect, + FPDF_LPFCloneStreamCallback lpfCallback, + void* pUserData) const; - static CPDF_Stream* Create(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict) - { - return new CPDF_Stream(pData, size, pDict); - } + protected: + ~CPDF_Stream(); - CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict); + CPDF_Dictionary* m_pDict; - CPDF_Dictionary* GetDict() const - { - return m_pDict; - } + FX_DWORD m_dwSize; - void SetData(const uint8_t* pData, FX_DWORD size, FX_BOOL bCompressed, FX_BOOL bKeepBuf); + FX_DWORD m_GenNum; - void InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict); + union { + uint8_t* m_pDataBuf; - void InitStream(IFX_FileRead *pFile, CPDF_Dictionary* pDict); + IFX_FileRead* m_pFile; + }; - FX_BOOL Identical(CPDF_Stream* pOther) const; + FX_FILESIZE m_FileOffset; - CPDF_StreamFilter* GetStreamFilter(FX_BOOL bRaw = FALSE) const; + CPDF_CryptoHandler* m_pCryptoHandler; + void InitStream(CPDF_Dictionary* pDict); + friend class CPDF_Object; + friend class CPDF_StreamAcc; + friend class CPDF_AttachmentAcc; +}; +class CPDF_StreamAcc { + public: + CPDF_StreamAcc(); + ~CPDF_StreamAcc(); - FX_DWORD GetRawSize() const - { - return m_dwSize; - } + void LoadAllData(const CPDF_Stream* pStream, + FX_BOOL bRawAccess = FALSE, + FX_DWORD estimated_size = 0, + FX_BOOL bImageAcc = FALSE); - FX_BOOL ReadRawData(FX_FILESIZE start_pos, uint8_t* pBuf, FX_DWORD buf_size) const; + const CPDF_Stream* GetStream() const { return m_pStream; } + CPDF_Dictionary* GetDict() const { + return m_pStream ? m_pStream->GetDict() : NULL; + } - FX_BOOL IsMemoryBased() const - { - return m_GenNum == (FX_DWORD) - 1; - } + const uint8_t* GetData() const; - CPDF_Stream* Clone(FX_BOOL bDirect, FPDF_LPFCloneStreamCallback lpfCallback, void* pUserData) const; -protected: + FX_DWORD GetSize() const; - ~CPDF_Stream(); + uint8_t* DetachData(); - CPDF_Dictionary* m_pDict; + const CFX_ByteString& GetImageDecoder() { return m_ImageDecoder; } - FX_DWORD m_dwSize; + const CPDF_Dictionary* GetImageParam() { return m_pImageParam; } - FX_DWORD m_GenNum; + protected: + uint8_t* m_pData; - union { + FX_DWORD m_dwSize; - uint8_t* m_pDataBuf; + FX_BOOL m_bNewBuf; - IFX_FileRead* m_pFile; - }; + CFX_ByteString m_ImageDecoder; - FX_FILESIZE m_FileOffset; + CPDF_Dictionary* m_pImageParam; - CPDF_CryptoHandler* m_pCryptoHandler; + const CPDF_Stream* m_pStream; - void InitStream(CPDF_Dictionary* pDict); - friend class CPDF_Object; - friend class CPDF_StreamAcc; - friend class CPDF_AttachmentAcc; + uint8_t* m_pSrcData; }; -class CPDF_StreamAcc -{ -public: - - CPDF_StreamAcc(); - - ~CPDF_StreamAcc(); - - void LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess = FALSE, - FX_DWORD estimated_size = 0, FX_BOOL bImageAcc = FALSE); +CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, + const CPDF_Dictionary* pParam, + int width = 0, + int height = 0); +#define FPDF_FILTER_BUFFER_SIZE 20480 +class CPDF_StreamFilter { + public: + ~CPDF_StreamFilter(); - const CPDF_Stream* GetStream() const - { - return m_pStream; - } + FX_DWORD ReadBlock(uint8_t* buffer, FX_DWORD size); - CPDF_Dictionary* GetDict() const - { - return m_pStream? m_pStream->GetDict() : NULL; - } + FX_DWORD GetSrcPos() { return m_SrcOffset; } - const uint8_t* GetData() const; + const CPDF_Stream* GetStream() { return m_pStream; } - FX_DWORD GetSize() const; + protected: + CPDF_StreamFilter() {} - uint8_t* DetachData(); + FX_DWORD ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size); - const CFX_ByteString& GetImageDecoder() - { - return m_ImageDecoder; - } + const CPDF_Stream* m_pStream; - const CPDF_Dictionary* GetImageParam() - { - return m_pImageParam; - } -protected: + CFX_DataFilter* m_pFilter; - uint8_t* m_pData; + CFX_BinaryBuf* m_pBuffer; - FX_DWORD m_dwSize; + FX_DWORD m_BufOffset; - FX_BOOL m_bNewBuf; + FX_DWORD m_SrcOffset; - CFX_ByteString m_ImageDecoder; - - CPDF_Dictionary* m_pImageParam; - - const CPDF_Stream* m_pStream; - - uint8_t* m_pSrcData; + uint8_t m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE]; + friend class CPDF_Stream; }; -CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, const CPDF_Dictionary* pParam, int width = 0, int height = 0); -#define FPDF_FILTER_BUFFER_SIZE 20480 -class CPDF_StreamFilter -{ -public: - - ~CPDF_StreamFilter(); - - FX_DWORD ReadBlock(uint8_t* buffer, FX_DWORD size); +class CPDF_Null : public CPDF_Object { + public: + static CPDF_Null* Create() { return new CPDF_Null(); } - FX_DWORD GetSrcPos() - { - return m_SrcOffset; - } - - const CPDF_Stream* GetStream() - { - return m_pStream; - } -protected: - - CPDF_StreamFilter() {} - - FX_DWORD ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size); - - const CPDF_Stream* m_pStream; - - CFX_DataFilter* m_pFilter; + CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {} +}; +class CPDF_Reference : public CPDF_Object { + public: + CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum) + : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {} - CFX_BinaryBuf* m_pBuffer; + CPDF_IndirectObjects* GetObjList() const { return m_pObjList; } - FX_DWORD m_BufOffset; + FX_DWORD GetRefObjNum() const { return m_RefObjNum; } - FX_DWORD m_SrcOffset; + void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); - uint8_t m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE]; - friend class CPDF_Stream; -}; -class CPDF_Null : public CPDF_Object -{ -public: + FX_BOOL Identical(CPDF_Reference* pOther) const { + return m_RefObjNum == pOther->m_RefObjNum; + } - static CPDF_Null* Create() - { - return new CPDF_Null(); - } + protected: + CPDF_IndirectObjects* m_pObjList; - CPDF_Null() : CPDF_Object(PDFOBJ_NULL) { } + FX_DWORD m_RefObjNum; + friend class CPDF_Object; }; -class CPDF_Reference : public CPDF_Object -{ -public: - CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum) - : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) { - } - - CPDF_IndirectObjects* GetObjList() const - { - return m_pObjList; - } - - FX_DWORD GetRefObjNum() const - { - return m_RefObjNum; - } - - void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); - - FX_BOOL Identical(CPDF_Reference* pOther) const - { - return m_RefObjNum == pOther->m_RefObjNum; - } -protected: - - CPDF_IndirectObjects* m_pObjList; - - FX_DWORD m_RefObjNum; - friend class CPDF_Object; -}; -class CPDF_IndirectObjects -{ -public: - - CPDF_IndirectObjects(CPDF_Parser* pParser); +class CPDF_IndirectObjects { + public: + CPDF_IndirectObjects(CPDF_Parser* pParser); - ~CPDF_IndirectObjects(); + ~CPDF_IndirectObjects(); - CPDF_Object* GetIndirectObject(FX_DWORD objnum, struct PARSE_CONTEXT* pContext = NULL); + CPDF_Object* GetIndirectObject(FX_DWORD objnum, + struct PARSE_CONTEXT* pContext = NULL); - int GetIndirectType(FX_DWORD objnum); + int GetIndirectType(FX_DWORD objnum); - FX_DWORD AddIndirectObject(CPDF_Object* pObj); + FX_DWORD AddIndirectObject(CPDF_Object* pObj); - void ReleaseIndirectObject(FX_DWORD objnum); + void ReleaseIndirectObject(FX_DWORD objnum); - void InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj); + void InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj); - FX_DWORD GetLastObjNum() const; + FX_DWORD GetLastObjNum() const; - FX_POSITION GetStartPosition() const - { - return m_IndirectObjs.GetStartPosition(); - } + FX_POSITION GetStartPosition() const { + return m_IndirectObjs.GetStartPosition(); + } - void GetNextAssoc(FX_POSITION& rPos, FX_DWORD& objnum, CPDF_Object*& pObject) const - { - m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject); - } -protected: + void GetNextAssoc(FX_POSITION& rPos, + FX_DWORD& objnum, + CPDF_Object*& pObject) const { + m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject); + } - CFX_MapPtrToPtr m_IndirectObjs; + protected: + CFX_MapPtrToPtr m_IndirectObjs; - CPDF_Parser* m_pParser; + CPDF_Parser* m_pParser; - FX_DWORD m_LastObjNum; + FX_DWORD m_LastObjNum; }; #endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ |