| Index: core/include/fpdfapi/fpdf_parser.h
|
| diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
|
| index 951085b33a6e1172543be035610e817387d122c9..f80bb24a87a218bdbad3324ced031b3109bb80d0 100644
|
| --- a/core/include/fpdfapi/fpdf_parser.h
|
| +++ b/core/include/fpdfapi/fpdf_parser.h
|
| @@ -34,15 +34,15 @@ class CPDF_Pattern;
|
| class CPDF_FontEncoding;
|
| class CPDF_IccProfile;
|
| class CFX_PrivateData;
|
| -#define FPDFPERM_PRINT 0x0004
|
| -#define FPDFPERM_MODIFY 0x0008
|
| -#define FPDFPERM_EXTRACT 0x0010
|
| -#define FPDFPERM_ANNOT_FORM 0x0020
|
| -#define FPDFPERM_FILL_FORM 0x0100
|
| -#define FPDFPERM_EXTRACT_ACCESS 0x0200
|
| -#define FPDFPERM_ASSEMBLE 0x0400
|
| -#define FPDFPERM_PRINT_HIGH 0x0800
|
| -#define FPDF_PAGE_MAX_NUM 0xFFFFF
|
| +#define FPDFPERM_PRINT 0x0004
|
| +#define FPDFPERM_MODIFY 0x0008
|
| +#define FPDFPERM_EXTRACT 0x0010
|
| +#define FPDFPERM_ANNOT_FORM 0x0020
|
| +#define FPDFPERM_FILL_FORM 0x0100
|
| +#define FPDFPERM_EXTRACT_ACCESS 0x0200
|
| +#define FPDFPERM_ASSEMBLE 0x0400
|
| +#define FPDFPERM_PRINT_HIGH 0x0800
|
| +#define FPDF_PAGE_MAX_NUM 0xFFFFF
|
|
|
| // Indexed by 8-bit character code, contains either:
|
| // 'W' - for whitespace: NUL, TAB, CR, LF, FF, 0x80, 0xff
|
| @@ -51,859 +51,862 @@ class CFX_PrivateData;
|
| // 'R' - otherwise.
|
| extern const char PDF_CharType[256];
|
|
|
| -class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects
|
| -{
|
| -public:
|
| - CPDF_Document();
|
| - explicit CPDF_Document(CPDF_Parser* pParser);
|
| +class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects {
|
| + public:
|
| + CPDF_Document();
|
| + explicit CPDF_Document(CPDF_Parser* pParser);
|
|
|
| - ~CPDF_Document();
|
| + ~CPDF_Document();
|
|
|
| - CPDF_Parser* GetParser() const
|
| - {
|
| - return m_pParser;
|
| - }
|
| + CPDF_Parser* GetParser() const { return m_pParser; }
|
|
|
| - CPDF_Dictionary* GetRoot() const
|
| - {
|
| - return m_pRootDict;
|
| - }
|
| + CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
|
|
|
| - CPDF_Dictionary* GetInfo() const
|
| - {
|
| - return m_pInfoDict;
|
| - }
|
| + CPDF_Dictionary* GetInfo() const { return m_pInfoDict; }
|
|
|
| - void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const
|
| - {
|
| - id1 = m_ID1;
|
| - id2 = m_ID2;
|
| - }
|
| + void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const {
|
| + id1 = m_ID1;
|
| + id2 = m_ID2;
|
| + }
|
|
|
| - int GetPageCount() const;
|
| + int GetPageCount() const;
|
|
|
| - CPDF_Dictionary* GetPage(int iPage);
|
| + CPDF_Dictionary* GetPage(int iPage);
|
|
|
| - int GetPageIndex(FX_DWORD objnum);
|
| + int GetPageIndex(FX_DWORD objnum);
|
|
|
| - FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
|
| + FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
|
|
|
| - FX_BOOL IsOwner() const;
|
| + FX_BOOL IsOwner() const;
|
|
|
| + CPDF_DocPageData* GetPageData() { return GetValidatePageData(); }
|
|
|
| + void ClearPageData();
|
|
|
| - CPDF_DocPageData* GetPageData()
|
| - {
|
| - return GetValidatePageData();
|
| - }
|
| + void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
|
|
|
| - void ClearPageData();
|
| + CPDF_DocRenderData* GetRenderData() { return GetValidateRenderData(); }
|
|
|
| - void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
|
| + void ClearRenderData();
|
|
|
| + void ClearRenderFont();
|
|
|
| - CPDF_DocRenderData* GetRenderData()
|
| - {
|
| - return GetValidateRenderData();
|
| - }
|
| + FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
|
|
|
| - void ClearRenderData();
|
| + // |pFontDict| must not be null.
|
| + CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
|
|
|
| - void ClearRenderFont();
|
| + CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj,
|
| + CPDF_Dictionary* pResources = NULL);
|
|
|
| + CPDF_Pattern* LoadPattern(CPDF_Object* pObj,
|
| + FX_BOOL bShading,
|
| + const CFX_AffineMatrix* matrix = NULL);
|
|
|
| - FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
|
| + CPDF_Image* LoadImageF(CPDF_Object* pObj);
|
|
|
| - // |pFontDict| must not be null.
|
| - CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
|
| + CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
|
|
|
| - CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources = NULL);
|
| -
|
| - CPDF_Pattern* LoadPattern(CPDF_Object* pObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix = NULL);
|
| -
|
| - CPDF_Image* LoadImageF(CPDF_Object* pObj);
|
| -
|
| - CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
|
| -
|
| - CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
|
| + CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
|
|
|
| #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
|
|
|
| - CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
|
| - CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
|
| + CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont,
|
| + FX_BOOL bVert,
|
| + FX_BOOL bTranslateName = FALSE);
|
| + CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont,
|
| + FX_BOOL bVert,
|
| + FX_BOOL bTranslateName = FALSE);
|
| #endif
|
| #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
|
| - CPDF_Font* AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
|
| + CPDF_Font* AddMacFont(CTFontRef pFont,
|
| + FX_BOOL bVert,
|
| + FX_BOOL bTranslateName = FALSE);
|
| #endif
|
|
|
| - CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
|
| -
|
| -
|
| - CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
|
| -
|
| - void CreateNewDoc();
|
| -
|
| - CPDF_Dictionary* CreateNewPage(int iPage);
|
| + CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
|
|
|
| - void DeletePage(int iPage);
|
| + CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
|
|
|
| - void LoadDoc();
|
| - void LoadAsynDoc(CPDF_Dictionary *pLinearized);
|
| - void LoadPages();
|
| -protected:
|
| + void CreateNewDoc();
|
|
|
| - CPDF_Dictionary* m_pRootDict;
|
| + CPDF_Dictionary* CreateNewPage(int iPage);
|
|
|
| - CPDF_Dictionary* m_pInfoDict;
|
| + void DeletePage(int iPage);
|
|
|
| - CFX_ByteString m_ID1;
|
| + void LoadDoc();
|
| + void LoadAsynDoc(CPDF_Dictionary* pLinearized);
|
| + void LoadPages();
|
|
|
| - CFX_ByteString m_ID2;
|
| + protected:
|
| + CPDF_Dictionary* m_pRootDict;
|
|
|
| + CPDF_Dictionary* m_pInfoDict;
|
|
|
| - FX_BOOL m_bLinearized;
|
| + CFX_ByteString m_ID1;
|
|
|
| - FX_DWORD m_dwFirstPageNo;
|
| + CFX_ByteString m_ID2;
|
|
|
| - FX_DWORD m_dwFirstPageObjNum;
|
| + FX_BOOL m_bLinearized;
|
|
|
| - CFX_DWordArray m_PageList;
|
| + FX_DWORD m_dwFirstPageNo;
|
|
|
| - int _GetPageCount() const;
|
| - CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level);
|
| - int _FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level = 0);
|
| - FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
|
| - FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
|
| - CPDF_DocPageData* GetValidatePageData();
|
| - CPDF_DocRenderData* GetValidateRenderData();
|
| - friend class CPDF_Creator;
|
| - friend class CPDF_Parser;
|
| - friend class CPDF_DataAvail;
|
| - friend class CPDF_OCContext;
|
| + FX_DWORD m_dwFirstPageObjNum;
|
|
|
| + CFX_DWordArray m_PageList;
|
|
|
| + int _GetPageCount() const;
|
| + CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages,
|
| + int iPage,
|
| + int nPagesToGo,
|
| + int level);
|
| + int _FindPageIndex(CPDF_Dictionary* pNode,
|
| + FX_DWORD& skip_count,
|
| + FX_DWORD objnum,
|
| + int& index,
|
| + int level = 0);
|
| + FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
|
| + FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
|
| + CPDF_DocPageData* GetValidatePageData();
|
| + CPDF_DocRenderData* GetValidateRenderData();
|
| + friend class CPDF_Creator;
|
| + friend class CPDF_Parser;
|
| + friend class CPDF_DataAvail;
|
| + friend class CPDF_OCContext;
|
|
|
| - CPDF_DocPageData* m_pDocPage;
|
| -
|
| - CPDF_DocRenderData* m_pDocRender;
|
| + CPDF_DocPageData* m_pDocPage;
|
|
|
| + CPDF_DocRenderData* m_pDocRender;
|
| };
|
|
|
| -#define PDFWORD_EOF 0
|
| -#define PDFWORD_NUMBER 1
|
| -#define PDFWORD_TEXT 2
|
| -#define PDFWORD_DELIMITER 3
|
| -#define PDFWORD_NAME 4
|
| -class CPDF_SimpleParser
|
| -{
|
| -public:
|
| -
|
| - CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
|
| +#define PDFWORD_EOF 0
|
| +#define PDFWORD_NUMBER 1
|
| +#define PDFWORD_TEXT 2
|
| +#define PDFWORD_DELIMITER 3
|
| +#define PDFWORD_NAME 4
|
| +class CPDF_SimpleParser {
|
| + public:
|
| + CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
|
|
|
| - CPDF_SimpleParser(const CFX_ByteStringC& str);
|
| + CPDF_SimpleParser(const CFX_ByteStringC& str);
|
|
|
| - CFX_ByteStringC GetWord();
|
| + CFX_ByteStringC GetWord();
|
|
|
| - FX_BOOL SearchToken(const CFX_ByteStringC& token);
|
| + FX_BOOL SearchToken(const CFX_ByteStringC& token);
|
|
|
| - FX_BOOL SkipWord(const CFX_ByteStringC& token);
|
| + FX_BOOL SkipWord(const CFX_ByteStringC& token);
|
|
|
| - FX_BOOL FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
|
| - FX_DWORD& start_pos, FX_DWORD& end_pos);
|
| + FX_BOOL FindTagPair(const CFX_ByteStringC& start_token,
|
| + const CFX_ByteStringC& end_token,
|
| + FX_DWORD& start_pos,
|
| + FX_DWORD& end_pos);
|
|
|
| - FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
|
| + FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
|
|
|
| - FX_DWORD GetPos()
|
| - {
|
| - return m_dwCurPos;
|
| - }
|
| + FX_DWORD GetPos() { return m_dwCurPos; }
|
|
|
| - void SetPos(FX_DWORD pos)
|
| - {
|
| - ASSERT(pos <= m_dwSize);
|
| - m_dwCurPos = pos;
|
| - }
|
| -private:
|
| + void SetPos(FX_DWORD pos) {
|
| + ASSERT(pos <= m_dwSize);
|
| + m_dwCurPos = pos;
|
| + }
|
|
|
| - void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
|
| + private:
|
| + void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
|
|
|
| - const uint8_t* m_pData;
|
| + const uint8_t* m_pData;
|
|
|
| - FX_DWORD m_dwSize;
|
| + FX_DWORD m_dwSize;
|
|
|
| - FX_DWORD m_dwCurPos;
|
| + FX_DWORD m_dwCurPos;
|
| };
|
| -class CPDF_SyntaxParser
|
| -{
|
| -public:
|
| +class CPDF_SyntaxParser {
|
| + public:
|
| + CPDF_SyntaxParser();
|
| + virtual ~CPDF_SyntaxParser();
|
|
|
| - CPDF_SyntaxParser();
|
| - virtual ~CPDF_SyntaxParser();
|
| + void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
|
|
|
| - void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
|
| + FX_FILESIZE SavePos() { return m_Pos; }
|
|
|
| - FX_FILESIZE SavePos()
|
| - {
|
| - return m_Pos;
|
| - }
|
| + void RestorePos(FX_FILESIZE pos) { m_Pos = pos; }
|
|
|
| - void RestorePos(FX_FILESIZE pos)
|
| - {
|
| - m_Pos = pos;
|
| - }
|
| + CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList,
|
| + FX_DWORD objnum,
|
| + FX_DWORD gennum,
|
| + struct PARSE_CONTEXT* pContext = NULL,
|
| + FX_BOOL bDecrypt = TRUE);
|
|
|
| - CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL, FX_BOOL bDecrypt = TRUE);
|
| + CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList,
|
| + FX_DWORD objnum,
|
| + FX_DWORD gennum,
|
| + struct PARSE_CONTEXT* pContext = NULL);
|
|
|
| + int GetDirectNum();
|
|
|
| - CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL);
|
| + CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
|
|
|
| - int GetDirectNum();
|
| + CFX_ByteString GetName();
|
|
|
| - CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
|
| + CFX_ByteString GetKeyword();
|
|
|
| - CFX_ByteString GetName();
|
| + void GetBinary(uint8_t* buffer, FX_DWORD size);
|
|
|
| - CFX_ByteString GetKeyword();
|
| + void ToNextLine();
|
|
|
| - void GetBinary(uint8_t* buffer, FX_DWORD size);
|
| + void ToNextWord();
|
|
|
| - void ToNextLine();
|
| + FX_BOOL SearchWord(const CFX_ByteStringC& word,
|
| + FX_BOOL bWholeWord,
|
| + FX_BOOL bForward,
|
| + FX_FILESIZE limit);
|
|
|
| - void ToNextWord();
|
| + int SearchMultiWord(const CFX_ByteStringC& words,
|
| + FX_BOOL bWholeWord,
|
| + FX_FILESIZE limit);
|
|
|
| - FX_BOOL SearchWord(const CFX_ByteStringC& word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);
|
| + FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
|
|
|
| - int SearchMultiWord(const CFX_ByteStringC& words, FX_BOOL bWholeWord, FX_FILESIZE limit);
|
| + void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler) {
|
| + m_pCryptoHandler = pCryptoHandler;
|
| + }
|
|
|
| - FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
|
| + FX_BOOL IsEncrypted() { return m_pCryptoHandler != NULL; }
|
|
|
| - void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler)
|
| - {
|
| - m_pCryptoHandler = pCryptoHandler;
|
| - }
|
| + FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
|
|
|
| - FX_BOOL IsEncrypted()
|
| - {
|
| - return m_pCryptoHandler != NULL;
|
| - }
|
| + FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
|
|
|
| - FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
|
| + CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
|
|
|
| - FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
|
| + protected:
|
| + static const int kParserMaxRecursionDepth = 64;
|
| + static int s_CurrentRecursionDepth;
|
|
|
| - CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
|
| -protected:
|
| - static const int kParserMaxRecursionDepth = 64;
|
| - static int s_CurrentRecursionDepth;
|
| + virtual FX_BOOL GetNextChar(uint8_t& ch);
|
|
|
| - virtual FX_BOOL GetNextChar(uint8_t& ch);
|
| + FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
|
|
|
| - FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
|
| + void GetNextWord();
|
|
|
| - void GetNextWord();
|
| + FX_BOOL IsWholeWord(FX_FILESIZE startpos,
|
| + FX_FILESIZE limit,
|
| + const uint8_t* tag,
|
| + FX_DWORD taglen);
|
|
|
| - FX_BOOL IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, const uint8_t* tag, FX_DWORD taglen);
|
| + CFX_ByteString ReadString();
|
|
|
| - CFX_ByteString ReadString();
|
| + CFX_ByteString ReadHexString();
|
|
|
| - CFX_ByteString ReadHexString();
|
| + CPDF_Stream* ReadStream(CPDF_Dictionary* pDict,
|
| + PARSE_CONTEXT* pContext,
|
| + FX_DWORD objnum,
|
| + FX_DWORD gennum);
|
|
|
| - CPDF_Stream* ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext, FX_DWORD objnum, FX_DWORD gennum);
|
| + FX_FILESIZE m_Pos;
|
|
|
| - FX_FILESIZE m_Pos;
|
| + FX_BOOL m_bFileStream;
|
|
|
| - FX_BOOL m_bFileStream;
|
| + int m_MetadataObjnum;
|
|
|
| - int m_MetadataObjnum;
|
| + IFX_FileRead* m_pFileAccess;
|
|
|
| - IFX_FileRead* m_pFileAccess;
|
| + FX_DWORD m_HeaderOffset;
|
|
|
| - FX_DWORD m_HeaderOffset;
|
| + FX_FILESIZE m_FileLen;
|
|
|
| - FX_FILESIZE m_FileLen;
|
| + uint8_t* m_pFileBuf;
|
|
|
| - uint8_t* m_pFileBuf;
|
| + FX_DWORD m_BufSize;
|
|
|
| - FX_DWORD m_BufSize;
|
| + FX_FILESIZE m_BufOffset;
|
|
|
| - FX_FILESIZE m_BufOffset;
|
| + CPDF_CryptoHandler* m_pCryptoHandler;
|
|
|
| - CPDF_CryptoHandler* m_pCryptoHandler;
|
| + uint8_t m_WordBuffer[257];
|
|
|
| - uint8_t m_WordBuffer[257];
|
| + FX_DWORD m_WordSize;
|
|
|
| - FX_DWORD m_WordSize;
|
| + FX_BOOL m_bIsNumber;
|
|
|
| - FX_BOOL m_bIsNumber;
|
| -
|
| - FX_FILESIZE m_dwWordPos;
|
| - friend class CPDF_Parser;
|
| - friend class CPDF_DataAvail;
|
| + FX_FILESIZE m_dwWordPos;
|
| + friend class CPDF_Parser;
|
| + friend class CPDF_DataAvail;
|
| };
|
|
|
| -#define PDFPARSE_TYPEONLY 1
|
| -#define PDFPARSE_NOSTREAM 2
|
| +#define PDFPARSE_TYPEONLY 1
|
| +#define PDFPARSE_NOSTREAM 2
|
| struct PARSE_CONTEXT {
|
| - uint32_t m_Flags;
|
| - FX_FILESIZE m_DictStart;
|
| - FX_FILESIZE m_DictEnd;
|
| - FX_FILESIZE m_DataStart;
|
| - FX_FILESIZE m_DataEnd;
|
| + uint32_t m_Flags;
|
| + FX_FILESIZE m_DictStart;
|
| + FX_FILESIZE m_DictEnd;
|
| + FX_FILESIZE m_DataStart;
|
| + FX_FILESIZE m_DataEnd;
|
| };
|
|
|
| -#define PDFPARSE_ERROR_SUCCESS 0
|
| -#define PDFPARSE_ERROR_FILE 1
|
| -#define PDFPARSE_ERROR_FORMAT 2
|
| -#define PDFPARSE_ERROR_PASSWORD 3
|
| -#define PDFPARSE_ERROR_HANDLER 4
|
| -#define PDFPARSE_ERROR_CERT 5
|
| -
|
| -class CPDF_Parser
|
| -{
|
| -public:
|
| - CPDF_Parser();
|
| - ~CPDF_Parser();
|
| +#define PDFPARSE_ERROR_SUCCESS 0
|
| +#define PDFPARSE_ERROR_FILE 1
|
| +#define PDFPARSE_ERROR_FORMAT 2
|
| +#define PDFPARSE_ERROR_PASSWORD 3
|
| +#define PDFPARSE_ERROR_HANDLER 4
|
| +#define PDFPARSE_ERROR_CERT 5
|
|
|
| - FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
|
| - FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
|
| - FX_DWORD StartParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
|
| +class CPDF_Parser {
|
| + public:
|
| + CPDF_Parser();
|
| + ~CPDF_Parser();
|
|
|
| - void CloseParser(FX_BOOL bReParse = FALSE);
|
| -
|
| - FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
|
| + FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
|
| + FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
|
| + FX_DWORD StartParse(IFX_FileRead* pFile,
|
| + FX_BOOL bReParse = FALSE,
|
| + FX_BOOL bOwnFileRead = TRUE);
|
|
|
| - FX_BOOL IsOwner();
|
| -
|
| - void SetPassword(const FX_CHAR* password)
|
| - {
|
| - m_Password = password;
|
| - }
|
| -
|
| - CFX_ByteString GetPassword()
|
| - {
|
| - return m_Password;
|
| - }
|
| + void CloseParser(FX_BOOL bReParse = FALSE);
|
|
|
| - CPDF_SecurityHandler* GetSecurityHandler()
|
| - {
|
| - return m_pSecurityHandler;
|
| - }
|
| -
|
| - CPDF_CryptoHandler* GetCryptoHandler()
|
| - {
|
| - return m_Syntax.m_pCryptoHandler;
|
| - }
|
| -
|
| - void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced = FALSE);
|
| + FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
|
|
|
| - CFX_ByteString GetRecipient()
|
| - {
|
| - return m_bsRecipient;
|
| - }
|
| + FX_BOOL IsOwner();
|
|
|
| - CPDF_Dictionary* GetTrailer()
|
| - {
|
| - return m_pTrailer;
|
| - }
|
| + void SetPassword(const FX_CHAR* password) { m_Password = password; }
|
|
|
| - FX_FILESIZE GetLastXRefOffset()
|
| - {
|
| - return m_LastXRefOffset;
|
| - }
|
| + CFX_ByteString GetPassword() { return m_Password; }
|
|
|
| - CPDF_Document* GetDocument()
|
| - {
|
| - return m_pDocument;
|
| - }
|
| + CPDF_SecurityHandler* GetSecurityHandler() { return m_pSecurityHandler; }
|
|
|
| - CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers()
|
| - {
|
| - return &m_Trailers;
|
| - }
|
| + CPDF_CryptoHandler* GetCryptoHandler() { return m_Syntax.m_pCryptoHandler; }
|
|
|
| - FX_DWORD GetRootObjNum();
|
| - FX_DWORD GetInfoObjNum() ;
|
| - CPDF_Array* GetIDArray() ;
|
| + void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
|
| + FX_BOOL bForced = FALSE);
|
|
|
| - CPDF_Dictionary* GetEncryptDict()
|
| - {
|
| - return m_pEncryptDict;
|
| - }
|
| + CFX_ByteString GetRecipient() { return m_bsRecipient; }
|
|
|
| - FX_BOOL IsEncrypted()
|
| - {
|
| - return GetEncryptDict() != NULL;
|
| - }
|
| + CPDF_Dictionary* GetTrailer() { return m_pTrailer; }
|
|
|
| + FX_FILESIZE GetLastXRefOffset() { return m_LastXRefOffset; }
|
|
|
| - CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL) ;
|
| - FX_DWORD GetLastObjNum();
|
| - FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
|
| + CPDF_Document* GetDocument() { return m_pDocument; }
|
|
|
| - FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
|
| + CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers() {
|
| + return &m_Trailers;
|
| + }
|
|
|
| - FX_FILESIZE GetObjectSize(FX_DWORD objnum);
|
| + FX_DWORD GetRootObjNum();
|
| + FX_DWORD GetInfoObjNum();
|
| + CPDF_Array* GetIDArray();
|
|
|
| - int GetObjectVersion(FX_DWORD objnum)
|
| - {
|
| - return m_ObjVersion[objnum];
|
| - }
|
| + CPDF_Dictionary* GetEncryptDict() { return m_pEncryptDict; }
|
|
|
| - void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
|
| + FX_BOOL IsEncrypted() { return GetEncryptDict() != NULL; }
|
|
|
| - FX_BOOL GetFileStreamOption()
|
| - {
|
| - return m_Syntax.m_bFileStream;
|
| - }
|
| + CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList,
|
| + FX_DWORD objnum,
|
| + PARSE_CONTEXT* pContext = NULL);
|
| + FX_DWORD GetLastObjNum();
|
| + FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
|
|
|
| - void SetFileStreamOption(FX_BOOL b)
|
| - {
|
| - m_Syntax.m_bFileStream = b;
|
| - }
|
| + FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
|
|
|
| - IFX_FileRead* GetFileAccess() const
|
| - {
|
| - return m_Syntax.m_pFileAccess;
|
| - }
|
| + FX_FILESIZE GetObjectSize(FX_DWORD objnum);
|
|
|
| - int GetFileVersion() const
|
| - {
|
| - return m_FileVersion;
|
| - }
|
| + int GetObjectVersion(FX_DWORD objnum) { return m_ObjVersion[objnum]; }
|
|
|
| - FX_BOOL IsXRefStream() const
|
| - {
|
| - return m_bXRefStream;
|
| - }
|
| - CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
|
| - struct PARSE_CONTEXT* pContext);
|
| + void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
|
|
|
| - CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
|
| - struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos);
|
| + FX_BOOL GetFileStreamOption() { return m_Syntax.m_bFileStream; }
|
|
|
| - FX_DWORD StartAsynParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
|
| + void SetFileStreamOption(FX_BOOL b) { m_Syntax.m_bFileStream = b; }
|
|
|
| - FX_DWORD GetFirstPageNo()
|
| - {
|
| - return m_dwFirstPageNo;
|
| - }
|
| -protected:
|
| - CPDF_Document* m_pDocument;
|
| + IFX_FileRead* GetFileAccess() const { return m_Syntax.m_pFileAccess; }
|
|
|
| - CPDF_SyntaxParser m_Syntax;
|
| - FX_BOOL m_bOwnFileRead;
|
| - CPDF_Object* ParseDirect(CPDF_Object* pObj);
|
| + int GetFileVersion() const { return m_FileVersion; }
|
|
|
| - FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
|
| + FX_BOOL IsXRefStream() const { return m_bXRefStream; }
|
| + CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList,
|
| + FX_FILESIZE pos,
|
| + FX_DWORD objnum,
|
| + struct PARSE_CONTEXT* pContext);
|
|
|
| - FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
|
| + CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList,
|
| + FX_FILESIZE pos,
|
| + FX_DWORD objnum,
|
| + struct PARSE_CONTEXT* pContext,
|
| + FX_FILESIZE* pResultPos);
|
|
|
| - FX_BOOL LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst);
|
| + FX_DWORD StartAsynParse(IFX_FileRead* pFile,
|
| + FX_BOOL bReParse = FALSE,
|
| + FX_BOOL bOwnFileRead = TRUE);
|
|
|
| - FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
|
| + FX_DWORD GetFirstPageNo() { return m_dwFirstPageNo; }
|
|
|
| - CPDF_Dictionary* LoadTrailerV4();
|
| + protected:
|
| + CPDF_Document* m_pDocument;
|
|
|
| - FX_BOOL RebuildCrossRef();
|
| + CPDF_SyntaxParser m_Syntax;
|
| + FX_BOOL m_bOwnFileRead;
|
| + CPDF_Object* ParseDirect(CPDF_Object* pObj);
|
|
|
| - FX_DWORD SetEncryptHandler();
|
| + FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
|
|
|
| - void ReleaseEncryptHandler();
|
| + FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
|
|
|
| - FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
|
| + FX_BOOL LoadCrossRefV4(FX_FILESIZE pos,
|
| + FX_FILESIZE streampos,
|
| + FX_BOOL bSkip,
|
| + FX_BOOL bFirst);
|
|
|
| - FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
|
| + FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
|
|
|
| - FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
|
| + CPDF_Dictionary* LoadTrailerV4();
|
|
|
| - FX_DWORD LoadLinearizedMainXRefTable();
|
| + FX_BOOL RebuildCrossRef();
|
|
|
| - CFX_MapPtrToPtr m_ObjectStreamMap;
|
| + FX_DWORD SetEncryptHandler();
|
|
|
| - CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
|
| + void ReleaseEncryptHandler();
|
|
|
| - FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
|
| + FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
|
|
|
| + FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
|
|
|
| + FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
|
|
|
| - int m_FileVersion;
|
| + FX_DWORD LoadLinearizedMainXRefTable();
|
|
|
| - CPDF_Dictionary* m_pTrailer;
|
| + CFX_MapPtrToPtr m_ObjectStreamMap;
|
|
|
| - CPDF_Dictionary* m_pEncryptDict;
|
| - void SetEncryptDictionary(CPDF_Dictionary* pDict);
|
| + CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
|
|
|
| - FX_FILESIZE m_LastXRefOffset;
|
| + FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
|
|
|
| - FX_BOOL m_bXRefStream;
|
| + int m_FileVersion;
|
|
|
| + CPDF_Dictionary* m_pTrailer;
|
|
|
| - CPDF_SecurityHandler* m_pSecurityHandler;
|
| + CPDF_Dictionary* m_pEncryptDict;
|
| + void SetEncryptDictionary(CPDF_Dictionary* pDict);
|
|
|
| - FX_BOOL m_bForceUseSecurityHandler;
|
| + FX_FILESIZE m_LastXRefOffset;
|
|
|
| - CFX_ByteString m_bsRecipient;
|
| + FX_BOOL m_bXRefStream;
|
|
|
| - CFX_ByteString m_FilePath;
|
| + CPDF_SecurityHandler* m_pSecurityHandler;
|
|
|
| - CFX_ByteString m_Password;
|
| + FX_BOOL m_bForceUseSecurityHandler;
|
|
|
| - CFX_FileSizeArray m_CrossRef;
|
| + CFX_ByteString m_bsRecipient;
|
|
|
| - CFX_ByteArray m_V5Type;
|
| + CFX_ByteString m_FilePath;
|
|
|
| - CFX_FileSizeArray m_SortedOffset;
|
| + CFX_ByteString m_Password;
|
|
|
| - CFX_WordArray m_ObjVersion;
|
| - CFX_ArrayTemplate<CPDF_Dictionary *> m_Trailers;
|
| + CFX_FileSizeArray m_CrossRef;
|
|
|
| - FX_BOOL m_bVersionUpdated;
|
| + CFX_ByteArray m_V5Type;
|
|
|
| - CPDF_Object* m_pLinearized;
|
| -
|
| - FX_DWORD m_dwFirstPageNo;
|
| -
|
| - FX_DWORD m_dwXrefStartObjNum;
|
| - friend class CPDF_Creator;
|
| - friend class CPDF_DataAvail;
|
| -};
|
| -#define FXCIPHER_NONE 0
|
| -#define FXCIPHER_RC4 1
|
| -#define FXCIPHER_AES 2
|
| -#define FXCIPHER_AES2 3
|
| -class CPDF_SecurityHandler
|
| -{
|
| -public:
|
| + CFX_FileSizeArray m_SortedOffset;
|
|
|
| - virtual ~CPDF_SecurityHandler() {}
|
| + CFX_WordArray m_ObjVersion;
|
| + CFX_ArrayTemplate<CPDF_Dictionary*> m_Trailers;
|
|
|
| - virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) = 0;
|
| + FX_BOOL m_bVersionUpdated;
|
|
|
| - virtual FX_DWORD GetPermissions() = 0;
|
| + CPDF_Object* m_pLinearized;
|
|
|
| - virtual FX_BOOL IsOwner() = 0;
|
| + FX_DWORD m_dwFirstPageNo;
|
|
|
| - virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen) = 0;
|
| -
|
| - virtual FX_BOOL IsMetadataEncrypted()
|
| - {
|
| - return TRUE;
|
| - }
|
| -
|
| - virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
|
| -
|
| - virtual CPDF_StandardSecurityHandler* GetStandardHandler()
|
| - {
|
| - return NULL;
|
| - }
|
| -};
|
| -#define PDF_ENCRYPT_CONTENT 0
|
| -class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler
|
| -{
|
| -public:
|
| - CPDF_StandardSecurityHandler();
|
| -
|
| - virtual ~CPDF_StandardSecurityHandler();
|
| - virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
|
| - virtual FX_DWORD GetPermissions();
|
| - virtual FX_BOOL IsOwner()
|
| - {
|
| - return m_bOwner;
|
| - }
|
| - virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen);
|
| - virtual FX_BOOL IsMetadataEncrypted();
|
| - virtual CPDF_CryptoHandler* CreateCryptoHandler();
|
| - virtual CPDF_StandardSecurityHandler* GetStandardHandler()
|
| - {
|
| - return this;
|
| - }
|
| -
|
| - void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
|
| - const uint8_t* user_pass, FX_DWORD user_size,
|
| - const uint8_t* owner_pass, FX_DWORD owner_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
|
| -
|
| - void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
|
| - const uint8_t* user_pass, FX_DWORD user_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
|
| -
|
| - CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
|
| - CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size, int32_t key_len);
|
| - int GetVersion()
|
| - {
|
| - return m_Version;
|
| - }
|
| - int GetRevision()
|
| - {
|
| - return m_Revision;
|
| - }
|
| -
|
| - int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key);
|
| - int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key, int key_len);
|
| -private:
|
| -
|
| - int m_Version;
|
| -
|
| - int m_Revision;
|
| -
|
| - CPDF_Parser* m_pParser;
|
| -
|
| - CPDF_Dictionary* m_pEncryptDict;
|
| -
|
| - FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
|
| - FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len);
|
| -
|
| - FX_BOOL CheckUserPassword(const uint8_t* password, FX_DWORD pass_size,
|
| - FX_BOOL bIgnoreEncryptMeta, uint8_t* key, int32_t key_len);
|
| -
|
| - FX_BOOL CheckOwnerPassword(const uint8_t* password, FX_DWORD pass_size, uint8_t* key, int32_t key_len);
|
| - FX_BOOL AES256_CheckPassword(const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, uint8_t* key);
|
| - void AES256_SetPassword(CPDF_Dictionary* pEncryptDict, const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, const uint8_t* key);
|
| - void AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permission, FX_BOOL bEncryptMetadata, const uint8_t* key);
|
| - void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
|
| - const uint8_t* user_pass, FX_DWORD user_size,
|
| - const uint8_t* owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type);
|
| - FX_BOOL CheckSecurity(int32_t key_len);
|
| -
|
| - FX_BOOL m_bOwner;
|
| -
|
| - FX_DWORD m_Permissions;
|
| -
|
| - int m_Cipher;
|
| -
|
| - uint8_t m_EncryptKey[32];
|
| -
|
| - int m_KeyLen;
|
| + FX_DWORD m_dwXrefStartObjNum;
|
| + friend class CPDF_Creator;
|
| + friend class CPDF_DataAvail;
|
| };
|
| -class CPDF_CryptoHandler
|
| -{
|
| -public:
|
| -
|
| - virtual ~CPDF_CryptoHandler() {}
|
| -
|
| - virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler) = 0;
|
| -
|
| - virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
|
| +#define FXCIPHER_NONE 0
|
| +#define FXCIPHER_RC4 1
|
| +#define FXCIPHER_AES 2
|
| +#define FXCIPHER_AES2 3
|
| +class CPDF_SecurityHandler {
|
| + public:
|
| + virtual ~CPDF_SecurityHandler() {}
|
|
|
| - virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
|
| + virtual FX_BOOL OnInit(CPDF_Parser* pParser,
|
| + CPDF_Dictionary* pEncryptDict) = 0;
|
|
|
| - virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
|
| + virtual FX_DWORD GetPermissions() = 0;
|
|
|
| - virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
|
| + virtual FX_BOOL IsOwner() = 0;
|
|
|
| + virtual FX_BOOL GetCryptInfo(int& cipher,
|
| + const uint8_t*& buffer,
|
| + int& keylen) = 0;
|
|
|
| - virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size) = 0;
|
| + virtual FX_BOOL IsMetadataEncrypted() { return TRUE; }
|
|
|
| - virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
|
| - uint8_t* dest_buf, FX_DWORD& dest_size) = 0;
|
| + virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
|
|
|
| - void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
|
| + virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return NULL; }
|
| };
|
| -class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler
|
| -{
|
| -public:
|
| +#define PDF_ENCRYPT_CONTENT 0
|
| +class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
|
| + public:
|
| + CPDF_StandardSecurityHandler();
|
| +
|
| + virtual ~CPDF_StandardSecurityHandler();
|
| + virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
|
| + virtual FX_DWORD GetPermissions();
|
| + virtual FX_BOOL IsOwner() { return m_bOwner; }
|
| + virtual FX_BOOL GetCryptInfo(int& cipher,
|
| + const uint8_t*& buffer,
|
| + int& keylen);
|
| + virtual FX_BOOL IsMetadataEncrypted();
|
| + virtual CPDF_CryptoHandler* CreateCryptoHandler();
|
| + virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return this; }
|
| +
|
| + void OnCreate(CPDF_Dictionary* pEncryptDict,
|
| + CPDF_Array* pIdArray,
|
| + const uint8_t* user_pass,
|
| + FX_DWORD user_size,
|
| + const uint8_t* owner_pass,
|
| + FX_DWORD owner_size,
|
| + FX_DWORD type = PDF_ENCRYPT_CONTENT);
|
| +
|
| + void OnCreate(CPDF_Dictionary* pEncryptDict,
|
| + CPDF_Array* pIdArray,
|
| + const uint8_t* user_pass,
|
| + FX_DWORD user_size,
|
| + FX_DWORD type = PDF_ENCRYPT_CONTENT);
|
| +
|
| + CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
|
| + CFX_ByteString GetUserPassword(const uint8_t* owner_pass,
|
| + FX_DWORD pass_size,
|
| + int32_t key_len);
|
| + int GetVersion() { return m_Version; }
|
| + int GetRevision() { return m_Revision; }
|
| +
|
| + int CheckPassword(const uint8_t* password,
|
| + FX_DWORD pass_size,
|
| + FX_BOOL bOwner,
|
| + uint8_t* key);
|
| + int CheckPassword(const uint8_t* password,
|
| + FX_DWORD pass_size,
|
| + FX_BOOL bOwner,
|
| + uint8_t* key,
|
| + int key_len);
|
| +
|
| + private:
|
| + int m_Version;
|
| +
|
| + int m_Revision;
|
| +
|
| + CPDF_Parser* m_pParser;
|
| +
|
| + CPDF_Dictionary* m_pEncryptDict;
|
| +
|
| + FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
|
| + FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict,
|
| + FX_DWORD type,
|
| + int& cipher,
|
| + int& key_len);
|
| +
|
| + FX_BOOL CheckUserPassword(const uint8_t* password,
|
| + FX_DWORD pass_size,
|
| + FX_BOOL bIgnoreEncryptMeta,
|
| + uint8_t* key,
|
| + int32_t key_len);
|
| +
|
| + FX_BOOL CheckOwnerPassword(const uint8_t* password,
|
| + FX_DWORD pass_size,
|
| + uint8_t* key,
|
| + int32_t key_len);
|
| + FX_BOOL AES256_CheckPassword(const uint8_t* password,
|
| + FX_DWORD size,
|
| + FX_BOOL bOwner,
|
| + uint8_t* key);
|
| + void AES256_SetPassword(CPDF_Dictionary* pEncryptDict,
|
| + const uint8_t* password,
|
| + FX_DWORD size,
|
| + FX_BOOL bOwner,
|
| + const uint8_t* key);
|
| + void AES256_SetPerms(CPDF_Dictionary* pEncryptDict,
|
| + FX_DWORD permission,
|
| + FX_BOOL bEncryptMetadata,
|
| + const uint8_t* key);
|
| + void OnCreate(CPDF_Dictionary* pEncryptDict,
|
| + CPDF_Array* pIdArray,
|
| + const uint8_t* user_pass,
|
| + FX_DWORD user_size,
|
| + const uint8_t* owner_pass,
|
| + FX_DWORD owner_size,
|
| + FX_BOOL bDefault,
|
| + FX_DWORD type);
|
| + FX_BOOL CheckSecurity(int32_t key_len);
|
| +
|
| + FX_BOOL m_bOwner;
|
| +
|
| + FX_DWORD m_Permissions;
|
| +
|
| + int m_Cipher;
|
| +
|
| + uint8_t m_EncryptKey[32];
|
| +
|
| + int m_KeyLen;
|
| +};
|
| +class CPDF_CryptoHandler {
|
| + public:
|
| + virtual ~CPDF_CryptoHandler() {}
|
|
|
| - CPDF_StandardCryptoHandler();
|
| + virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
|
| + CPDF_SecurityHandler* pSecurityHandler) = 0;
|
|
|
| - virtual ~CPDF_StandardCryptoHandler();
|
| + virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
|
|
|
| - FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
|
| - virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler);
|
| - virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
|
| - virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
|
| - virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
|
| - virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
|
| - virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size);
|
| - virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
|
| - uint8_t* dest_buf, FX_DWORD& dest_size);
|
| -protected:
|
| + virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
|
|
|
| - virtual void CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, const uint8_t* src_buf, FX_DWORD src_size,
|
| - uint8_t* dest_buf, FX_DWORD& dest_size);
|
| - virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
|
| - virtual FX_BOOL CryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
|
| - virtual FX_BOOL CryptFinish(void* context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
|
| + virtual FX_BOOL DecryptStream(void* context,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + CFX_BinaryBuf& dest_buf) = 0;
|
|
|
| - uint8_t m_EncryptKey[32];
|
| + virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
|
|
|
| - int m_KeyLen;
|
| + virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
|
| + FX_DWORD version,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size) = 0;
|
|
|
| - int m_Cipher;
|
| + virtual FX_BOOL EncryptContent(FX_DWORD objnum,
|
| + FX_DWORD version,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t* dest_buf,
|
| + FX_DWORD& dest_size) = 0;
|
|
|
| - uint8_t* m_pAESContext;
|
| + void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
|
| };
|
| -class CPDF_Point
|
| -{
|
| -public:
|
| -
|
| - CPDF_Point(FX_FLOAT xx, FX_FLOAT yy)
|
| - {
|
| - x = xx;
|
| - y = yy;
|
| - }
|
| +class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler {
|
| + public:
|
| + CPDF_StandardCryptoHandler();
|
| +
|
| + virtual ~CPDF_StandardCryptoHandler();
|
| +
|
| + FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
|
| + virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
|
| + CPDF_SecurityHandler* pSecurityHandler);
|
| + virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
|
| + virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
|
| + virtual FX_BOOL DecryptStream(void* context,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + CFX_BinaryBuf& dest_buf);
|
| + virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
|
| + virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
|
| + FX_DWORD version,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size);
|
| + virtual FX_BOOL EncryptContent(FX_DWORD objnum,
|
| + FX_DWORD version,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t* dest_buf,
|
| + FX_DWORD& dest_size);
|
| +
|
| + protected:
|
| + virtual void CryptBlock(FX_BOOL bEncrypt,
|
| + FX_DWORD objnum,
|
| + FX_DWORD gennum,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t* dest_buf,
|
| + FX_DWORD& dest_size);
|
| + virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
|
| + virtual FX_BOOL CryptStream(void* context,
|
| + const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + CFX_BinaryBuf& dest_buf,
|
| + FX_BOOL bEncrypt);
|
| + virtual FX_BOOL CryptFinish(void* context,
|
| + CFX_BinaryBuf& dest_buf,
|
| + FX_BOOL bEncrypt);
|
| +
|
| + uint8_t m_EncryptKey[32];
|
| +
|
| + int m_KeyLen;
|
| +
|
| + int m_Cipher;
|
| +
|
| + uint8_t* m_pAESContext;
|
| +};
|
| +class CPDF_Point {
|
| + public:
|
| + CPDF_Point(FX_FLOAT xx, FX_FLOAT yy) {
|
| + x = xx;
|
| + y = yy;
|
| + }
|
|
|
| - FX_FLOAT x;
|
| + FX_FLOAT x;
|
|
|
| - FX_FLOAT y;
|
| + FX_FLOAT y;
|
| };
|
|
|
| -#define CPDF_Rect CFX_FloatRect
|
| -#define CPDF_Matrix CFX_AffineMatrix
|
| +#define CPDF_Rect CFX_FloatRect
|
| +#define CPDF_Matrix CFX_AffineMatrix
|
| CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig);
|
| CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);
|
| CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);
|
| -CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE);
|
| -CFX_WideString PDF_DecodeText(const uint8_t* pData, FX_DWORD size, CFX_CharMap* pCharMap = NULL);
|
| -inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr, CFX_CharMap* pCharMap = NULL) {
|
| - return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(), pCharMap);
|
| +CFX_ByteString PDF_EncodeString(const CFX_ByteString& src,
|
| + FX_BOOL bHex = FALSE);
|
| +CFX_WideString PDF_DecodeText(const uint8_t* pData,
|
| + FX_DWORD size,
|
| + CFX_CharMap* pCharMap = NULL);
|
| +inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr,
|
| + CFX_CharMap* pCharMap = NULL) {
|
| + return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(),
|
| + pCharMap);
|
| }
|
| -CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString, int len = -1, CFX_CharMap* pCharMap = NULL);
|
| -inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL) {
|
| - return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
|
| +CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString,
|
| + int len = -1,
|
| + CFX_CharMap* pCharMap = NULL);
|
| +inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str,
|
| + CFX_CharMap* pCharMap = NULL) {
|
| + return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
|
| }
|
| FX_FLOAT PDF_ClipFloat(FX_FLOAT f);
|
| -class CFDF_Document : public CPDF_IndirectObjects
|
| -{
|
| -public:
|
| - static CFDF_Document* CreateNewDoc();
|
| - static CFDF_Document* ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile = FALSE);
|
| - static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
|
| -
|
| - ~CFDF_Document();
|
| -
|
| - FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
|
| -
|
| - CPDF_Dictionary* GetRoot() const
|
| - {
|
| - return m_pRootDict;
|
| - }
|
| -
|
| - CFX_WideString GetWin32Path() const;
|
| -protected:
|
| -
|
| - CFDF_Document();
|
| - void ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile);
|
| - CPDF_Dictionary* m_pRootDict;
|
| - IFX_FileRead* m_pFile;
|
| - FX_BOOL m_bOwnFile;
|
| -};
|
| +class CFDF_Document : public CPDF_IndirectObjects {
|
| + public:
|
| + static CFDF_Document* CreateNewDoc();
|
| + static CFDF_Document* ParseFile(IFX_FileRead* pFile,
|
| + FX_BOOL bOwnFile = FALSE);
|
| + static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
|
|
|
| -CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
|
| -void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fullpath);
|
| + ~CFDF_Document();
|
|
|
| -void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
|
| -FX_DWORD FlateDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
|
| -FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
|
| -class CPDF_NumberTree
|
| -{
|
| -public:
|
| + FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
|
|
|
| - CPDF_NumberTree(CPDF_Dictionary* pRoot)
|
| - {
|
| - m_pRoot = pRoot;
|
| - }
|
| + CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
|
|
|
| - CPDF_Object* LookupValue(int num);
|
| -protected:
|
| + CFX_WideString GetWin32Path() const;
|
|
|
| - CPDF_Dictionary* m_pRoot;
|
| + protected:
|
| + CFDF_Document();
|
| + void ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile);
|
| + CPDF_Dictionary* m_pRootDict;
|
| + IFX_FileRead* m_pFile;
|
| + FX_BOOL m_bOwnFile;
|
| };
|
|
|
| -class IFX_FileAvail
|
| -{
|
| -public:
|
| - virtual ~IFX_FileAvail() { }
|
| - virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size) = 0;
|
| +CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
|
| +void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec,
|
| + const CFX_WideString& fullpath);
|
| +
|
| +void FlateEncode(const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t*& dest_buf,
|
| + FX_DWORD& dest_size);
|
| +FX_DWORD FlateDecode(const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t*& dest_buf,
|
| + FX_DWORD& dest_size);
|
| +FX_DWORD RunLengthDecode(const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t*& dest_buf,
|
| + FX_DWORD& dest_size);
|
| +class CPDF_NumberTree {
|
| + public:
|
| + CPDF_NumberTree(CPDF_Dictionary* pRoot) { m_pRoot = pRoot; }
|
| +
|
| + CPDF_Object* LookupValue(int num);
|
| +
|
| + protected:
|
| + CPDF_Dictionary* m_pRoot;
|
| };
|
| -class IFX_DownloadHints
|
| -{
|
| -public:
|
| - virtual ~IFX_DownloadHints() { }
|
| - virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
|
| +
|
| +class IFX_FileAvail {
|
| + public:
|
| + virtual ~IFX_FileAvail() {}
|
| + virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) = 0;
|
| };
|
| -#define PDF_IS_LINEARIZED 1
|
| -#define PDF_NOT_LINEARIZED 0
|
| -#define PDF_UNKNOW_LINEARIZED -1
|
| -#define PDFFORM_NOTAVAIL 0
|
| -#define PDFFORM_AVAIL 1
|
| -#define PDFFORM_NOTEXIST 2
|
| -class IPDF_DataAvail
|
| -{
|
| -public:
|
| - static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
|
| - virtual ~IPDF_DataAvail() { }
|
| -
|
| - IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
|
| - IFX_FileRead* GetFileRead() const { return m_pFileRead; }
|
| -
|
| - virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
|
| - virtual void SetDocument(CPDF_Document* pDoc) = 0;
|
| - virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
|
| - virtual FX_BOOL IsLinearized() = 0;
|
| - virtual int32_t IsFormAvail(IFX_DownloadHints *pHints) = 0;
|
| - virtual int32_t IsLinearizedPDF() = 0;
|
| - virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) = 0;
|
| -
|
| -protected:
|
| - IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
|
| -
|
| - IFX_FileAvail* m_pFileAvail;
|
| - IFX_FileRead* m_pFileRead;
|
| +class IFX_DownloadHints {
|
| + public:
|
| + virtual ~IFX_DownloadHints() {}
|
| + virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
|
| };
|
| -class CPDF_SortObjNumArray
|
| -{
|
| -public:
|
| -
|
| - void AddObjNum(FX_DWORD dwObjNum);
|
| +#define PDF_IS_LINEARIZED 1
|
| +#define PDF_NOT_LINEARIZED 0
|
| +#define PDF_UNKNOW_LINEARIZED -1
|
| +#define PDFFORM_NOTAVAIL 0
|
| +#define PDFFORM_AVAIL 1
|
| +#define PDFFORM_NOTEXIST 2
|
| +class IPDF_DataAvail {
|
| + public:
|
| + static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail,
|
| + IFX_FileRead* pFileRead);
|
| + virtual ~IPDF_DataAvail() {}
|
| +
|
| + IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
|
| + IFX_FileRead* GetFileRead() const { return m_pFileRead; }
|
| +
|
| + virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
|
| + virtual void SetDocument(CPDF_Document* pDoc) = 0;
|
| + virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
|
| + virtual FX_BOOL IsLinearized() = 0;
|
| + virtual int32_t IsFormAvail(IFX_DownloadHints* pHints) = 0;
|
| + virtual int32_t IsLinearizedPDF() = 0;
|
| + virtual void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
|
| + FX_DWORD* pSize) = 0;
|
| +
|
| + protected:
|
| + IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
|
| +
|
| + IFX_FileAvail* m_pFileAvail;
|
| + IFX_FileRead* m_pFileRead;
|
| +};
|
| +class CPDF_SortObjNumArray {
|
| + public:
|
| + void AddObjNum(FX_DWORD dwObjNum);
|
|
|
| - FX_BOOL Find(FX_DWORD dwObjNum);
|
| + FX_BOOL Find(FX_DWORD dwObjNum);
|
|
|
| - void RemoveAll()
|
| - {
|
| - m_number_array.RemoveAll();
|
| - }
|
| -protected:
|
| + void RemoveAll() { m_number_array.RemoveAll(); }
|
|
|
| - FX_BOOL BinarySearch(FX_DWORD value, int &iNext);
|
| -protected:
|
| + protected:
|
| + FX_BOOL BinarySearch(FX_DWORD value, int& iNext);
|
|
|
| - CFX_DWordArray m_number_array;
|
| + protected:
|
| + CFX_DWordArray m_number_array;
|
| };
|
| enum PDF_PAGENODE_TYPE {
|
| - PDF_PAGENODE_UNKOWN = 0,
|
| - PDF_PAGENODE_PAGE,
|
| - PDF_PAGENODE_PAGES,
|
| - PDF_PAGENODE_ARRAY,
|
| + PDF_PAGENODE_UNKOWN = 0,
|
| + PDF_PAGENODE_PAGE,
|
| + PDF_PAGENODE_PAGES,
|
| + PDF_PAGENODE_ARRAY,
|
| };
|
| -class CPDF_PageNode
|
| -{
|
| -public:
|
| - CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
|
| - ~CPDF_PageNode();
|
| - PDF_PAGENODE_TYPE m_type;
|
| - FX_DWORD m_dwPageNo;
|
| - CFX_PtrArray m_childNode;
|
| +class CPDF_PageNode {
|
| + public:
|
| + CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
|
| + ~CPDF_PageNode();
|
| + PDF_PAGENODE_TYPE m_type;
|
| + FX_DWORD m_dwPageNo;
|
| + CFX_PtrArray m_childNode;
|
| };
|
| enum PDF_DATAAVAIL_STATUS {
|
| - PDF_DATAAVAIL_HEADER = 0,
|
| - PDF_DATAAVAIL_FIRSTPAGE,
|
| - PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
|
| - PDF_DATAAVAIL_END,
|
| - PDF_DATAAVAIL_CROSSREF,
|
| - PDF_DATAAVAIL_CROSSREF_ITEM,
|
| - PDF_DATAAVAIL_CROSSREF_STREAM,
|
| - PDF_DATAAVAIL_TRAILER,
|
| - PDF_DATAAVAIL_LOADALLCRSOSSREF,
|
| - PDF_DATAAVAIL_ROOT,
|
| - PDF_DATAAVAIL_INFO,
|
| - PDF_DATAAVAIL_ACROFORM,
|
| - PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
|
| - PDF_DATAAVAIL_PAGETREE,
|
| - PDF_DATAAVAIL_PAGE,
|
| - PDF_DATAAVAIL_PAGE_LATERLOAD,
|
| - PDF_DATAAVAIL_RESOURCES,
|
| - PDF_DATAAVAIL_DONE,
|
| - PDF_DATAAVAIL_ERROR,
|
| - PDF_DATAAVAIL_LOADALLFILE,
|
| - PDF_DATAAVAIL_TRAILER_APPEND
|
| + PDF_DATAAVAIL_HEADER = 0,
|
| + PDF_DATAAVAIL_FIRSTPAGE,
|
| + PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
|
| + PDF_DATAAVAIL_END,
|
| + PDF_DATAAVAIL_CROSSREF,
|
| + PDF_DATAAVAIL_CROSSREF_ITEM,
|
| + PDF_DATAAVAIL_CROSSREF_STREAM,
|
| + PDF_DATAAVAIL_TRAILER,
|
| + PDF_DATAAVAIL_LOADALLCRSOSSREF,
|
| + PDF_DATAAVAIL_ROOT,
|
| + PDF_DATAAVAIL_INFO,
|
| + PDF_DATAAVAIL_ACROFORM,
|
| + PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
|
| + PDF_DATAAVAIL_PAGETREE,
|
| + PDF_DATAAVAIL_PAGE,
|
| + PDF_DATAAVAIL_PAGE_LATERLOAD,
|
| + PDF_DATAAVAIL_RESOURCES,
|
| + PDF_DATAAVAIL_DONE,
|
| + PDF_DATAAVAIL_ERROR,
|
| + PDF_DATAAVAIL_LOADALLFILE,
|
| + PDF_DATAAVAIL_TRAILER_APPEND
|
| };
|
|
|
| #endif // CORE_INCLUDE_FPDFAPI_FPDF_PARSER_H_
|
|
|