| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 7 #ifndef CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
| 8 #define CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 8 #define CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <unordered_map> | 12 #include <unordered_map> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "core/fpdfapi/fpdf_page/cpdf_contentmark.h" | 15 #include "core/fpdfapi/fpdf_page/cpdf_contentmark.h" |
| 16 #include "core/fpdfapi/fpdf_page/cpdf_countedobject.h" | 16 #include "core/fpdfapi/fpdf_page/cpdf_countedobject.h" |
| 17 #include "core/fpdfapi/fpdf_page/cpdf_parseoptions.h" | |
| 18 #include "core/fpdfapi/fpdf_page/include/cpdf_pageobjectholder.h" | 17 #include "core/fpdfapi/fpdf_page/include/cpdf_pageobjectholder.h" |
| 19 #include "core/fxge/include/fx_ge.h" | 18 #include "core/fxge/include/fx_ge.h" |
| 20 | 19 |
| 21 class CPDF_AllStates; | 20 class CPDF_AllStates; |
| 22 class CPDF_ColorSpace; | 21 class CPDF_ColorSpace; |
| 23 class CPDF_Font; | 22 class CPDF_Font; |
| 24 class CPDF_FontEncoding; | 23 class CPDF_FontEncoding; |
| 25 class CPDF_Form; | 24 class CPDF_Form; |
| 26 class CPDF_IccProfile; | 25 class CPDF_IccProfile; |
| 27 class CPDF_Image; | 26 class CPDF_Image; |
| 28 class CPDF_ImageObject; | 27 class CPDF_ImageObject; |
| 29 class CPDF_Page; | 28 class CPDF_Page; |
| 30 class CPDF_ParseOptions; | |
| 31 class CPDF_Pattern; | 29 class CPDF_Pattern; |
| 32 class CPDF_StreamAcc; | 30 class CPDF_StreamAcc; |
| 33 class CPDF_TextObject; | 31 class CPDF_TextObject; |
| 34 class CPDF_Type3Char; | 32 class CPDF_Type3Char; |
| 35 | 33 |
| 36 #define PARSE_STEP_LIMIT 100 | 34 #define PARSE_STEP_LIMIT 100 |
| 37 | 35 |
| 38 class CPDF_StreamParser { | 36 class CPDF_StreamParser { |
| 39 public: | 37 public: |
| 40 enum SyntaxType { EndOfData, Number, Keyword, Name, Others }; | 38 enum SyntaxType { EndOfData, Number, Keyword, Name, Others }; |
| 41 | 39 |
| 42 CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize); | 40 CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize); |
| 43 ~CPDF_StreamParser(); | 41 ~CPDF_StreamParser(); |
| 44 | 42 |
| 45 CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc, | 43 CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc, |
| 46 CPDF_Dictionary* pDict, | 44 CPDF_Dictionary* pDict, |
| 47 CPDF_Object* pCSObj, | 45 CPDF_Object* pCSObj); |
| 48 FX_BOOL bDecode); | |
| 49 SyntaxType ParseNextElement(); | 46 SyntaxType ParseNextElement(); |
| 50 uint8_t* GetWordBuf() { return m_WordBuffer; } | 47 uint8_t* GetWordBuf() { return m_WordBuffer; } |
| 51 uint32_t GetWordSize() const { return m_WordSize; } | 48 uint32_t GetWordSize() const { return m_WordSize; } |
| 52 CPDF_Object* GetObject() { | 49 CPDF_Object* GetObject() { |
| 53 CPDF_Object* pObj = m_pLastObj; | 50 CPDF_Object* pObj = m_pLastObj; |
| 54 m_pLastObj = NULL; | 51 m_pLastObj = NULL; |
| 55 return pObj; | 52 return pObj; |
| 56 } | 53 } |
| 57 uint32_t GetPos() const { return m_Pos; } | 54 uint32_t GetPos() const { return m_Pos; } |
| 58 void SetPos(uint32_t pos) { m_Pos = pos; } | 55 void SetPos(uint32_t pos) { m_Pos = pos; } |
| 59 CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE, | 56 CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE, |
| 60 FX_BOOL bInArray = FALSE); | 57 FX_BOOL bInArray = FALSE); |
| 61 void SkipPathObject(); | |
| 62 | 58 |
| 63 protected: | 59 protected: |
| 64 friend class fpdf_page_parser_old_ReadHexString_Test; | 60 friend class fpdf_page_parser_old_ReadHexString_Test; |
| 65 | 61 |
| 66 void GetNextWord(FX_BOOL& bIsNumber); | 62 void GetNextWord(FX_BOOL& bIsNumber); |
| 67 CFX_ByteString ReadString(); | 63 CFX_ByteString ReadString(); |
| 68 CFX_ByteString ReadHexString(); | 64 CFX_ByteString ReadHexString(); |
| 69 const uint8_t* m_pBuf; | 65 const uint8_t* m_pBuf; |
| 70 | 66 |
| 71 // Length in bytes of m_pBuf. | 67 // Length in bytes of m_pBuf. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 #define _FPDF_MAX_OBJECT_STACK_SIZE_ 512 | 102 #define _FPDF_MAX_OBJECT_STACK_SIZE_ 512 |
| 107 class CPDF_StreamContentParser { | 103 class CPDF_StreamContentParser { |
| 108 public: | 104 public: |
| 109 CPDF_StreamContentParser(CPDF_Document* pDoc, | 105 CPDF_StreamContentParser(CPDF_Document* pDoc, |
| 110 CPDF_Dictionary* pPageResources, | 106 CPDF_Dictionary* pPageResources, |
| 111 CPDF_Dictionary* pParentResources, | 107 CPDF_Dictionary* pParentResources, |
| 112 CFX_Matrix* pmtContentToUser, | 108 CFX_Matrix* pmtContentToUser, |
| 113 CPDF_PageObjectHolder* pObjectHolder, | 109 CPDF_PageObjectHolder* pObjectHolder, |
| 114 CPDF_Dictionary* pResources, | 110 CPDF_Dictionary* pResources, |
| 115 CFX_FloatRect* pBBox, | 111 CFX_FloatRect* pBBox, |
| 116 CPDF_ParseOptions* pOptions, | |
| 117 CPDF_AllStates* pAllStates, | 112 CPDF_AllStates* pAllStates, |
| 118 int level); | 113 int level); |
| 119 ~CPDF_StreamContentParser(); | 114 ~CPDF_StreamContentParser(); |
| 120 | 115 |
| 121 CPDF_PageObjectHolder* GetPageObjectHolder() const { return m_pObjectHolder; } | 116 CPDF_PageObjectHolder* GetPageObjectHolder() const { return m_pObjectHolder; } |
| 122 CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); } | 117 CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); } |
| 123 FX_BOOL IsColored() const { return m_bColored; } | 118 FX_BOOL IsColored() const { return m_bColored; } |
| 124 const FX_FLOAT* GetType3Data() const { return m_Type3Data; } | 119 const FX_FLOAT* GetType3Data() const { return m_Type3Data; } |
| 125 | 120 |
| 126 void AddNumberParam(const FX_CHAR* str, int len); | 121 void AddNumberParam(const FX_CHAR* str, int len); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 void Handle_Invalid(); | 240 void Handle_Invalid(); |
| 246 | 241 |
| 247 CPDF_Document* const m_pDocument; | 242 CPDF_Document* const m_pDocument; |
| 248 CPDF_Dictionary* m_pPageResources; | 243 CPDF_Dictionary* m_pPageResources; |
| 249 CPDF_Dictionary* m_pParentResources; | 244 CPDF_Dictionary* m_pParentResources; |
| 250 CPDF_Dictionary* m_pResources; | 245 CPDF_Dictionary* m_pResources; |
| 251 CPDF_PageObjectHolder* m_pObjectHolder; | 246 CPDF_PageObjectHolder* m_pObjectHolder; |
| 252 int m_Level; | 247 int m_Level; |
| 253 CFX_Matrix m_mtContentToUser; | 248 CFX_Matrix m_mtContentToUser; |
| 254 CFX_FloatRect m_BBox; | 249 CFX_FloatRect m_BBox; |
| 255 CPDF_ParseOptions m_Options; | |
| 256 ContentParam m_ParamBuf[PARAM_BUF_SIZE]; | 250 ContentParam m_ParamBuf[PARAM_BUF_SIZE]; |
| 257 uint32_t m_ParamStartPos; | 251 uint32_t m_ParamStartPos; |
| 258 uint32_t m_ParamCount; | 252 uint32_t m_ParamCount; |
| 259 CPDF_StreamParser* m_pSyntax; | 253 CPDF_StreamParser* m_pSyntax; |
| 260 std::unique_ptr<CPDF_AllStates> m_pCurStates; | 254 std::unique_ptr<CPDF_AllStates> m_pCurStates; |
| 261 CPDF_ContentMark m_CurContentMark; | 255 CPDF_ContentMark m_CurContentMark; |
| 262 CFX_ArrayTemplate<CPDF_TextObject*> m_ClipTextList; | 256 CFX_ArrayTemplate<CPDF_TextObject*> m_ClipTextList; |
| 263 CPDF_TextObject* m_pLastTextObject; | 257 CPDF_TextObject* m_pLastTextObject; |
| 264 FX_FLOAT m_DefFontSize; | 258 FX_FLOAT m_DefFontSize; |
| 265 FX_PATHPOINT* m_pPathPoints; | 259 FX_PATHPOINT* m_pPathPoints; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 284 std::vector<std::unique_ptr<CPDF_AllStates>> m_StateStack; | 278 std::vector<std::unique_ptr<CPDF_AllStates>> m_StateStack; |
| 285 }; | 279 }; |
| 286 class CPDF_ContentParser { | 280 class CPDF_ContentParser { |
| 287 public: | 281 public: |
| 288 enum ParseStatus { Ready, ToBeContinued, Done }; | 282 enum ParseStatus { Ready, ToBeContinued, Done }; |
| 289 | 283 |
| 290 CPDF_ContentParser(); | 284 CPDF_ContentParser(); |
| 291 ~CPDF_ContentParser(); | 285 ~CPDF_ContentParser(); |
| 292 | 286 |
| 293 ParseStatus GetStatus() const { return m_Status; } | 287 ParseStatus GetStatus() const { return m_Status; } |
| 294 void Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions); | 288 void Start(CPDF_Page* pPage); |
| 295 void Start(CPDF_Form* pForm, | 289 void Start(CPDF_Form* pForm, |
| 296 CPDF_AllStates* pGraphicStates, | 290 CPDF_AllStates* pGraphicStates, |
| 297 CFX_Matrix* pParentMatrix, | 291 CFX_Matrix* pParentMatrix, |
| 298 CPDF_Type3Char* pType3Char, | 292 CPDF_Type3Char* pType3Char, |
| 299 CPDF_ParseOptions* pOptions, | |
| 300 int level); | 293 int level); |
| 301 void Continue(IFX_Pause* pPause); | 294 void Continue(IFX_Pause* pPause); |
| 302 | 295 |
| 303 private: | 296 private: |
| 304 enum InternalStage { | 297 enum InternalStage { |
| 305 STAGE_GETCONTENT = 1, | 298 STAGE_GETCONTENT = 1, |
| 306 STAGE_PARSE, | 299 STAGE_PARSE, |
| 307 STAGE_CHECKCLIP, | 300 STAGE_CHECKCLIP, |
| 308 }; | 301 }; |
| 309 | 302 |
| 310 ParseStatus m_Status; | 303 ParseStatus m_Status; |
| 311 InternalStage m_InternalStage; | 304 InternalStage m_InternalStage; |
| 312 CPDF_PageObjectHolder* m_pObjectHolder; | 305 CPDF_PageObjectHolder* m_pObjectHolder; |
| 313 FX_BOOL m_bForm; | 306 FX_BOOL m_bForm; |
| 314 CPDF_ParseOptions m_Options; | |
| 315 CPDF_Type3Char* m_pType3Char; | 307 CPDF_Type3Char* m_pType3Char; |
| 316 uint32_t m_nStreams; | 308 uint32_t m_nStreams; |
| 317 std::unique_ptr<CPDF_StreamAcc> m_pSingleStream; | 309 std::unique_ptr<CPDF_StreamAcc> m_pSingleStream; |
| 318 std::vector<std::unique_ptr<CPDF_StreamAcc>> m_StreamArray; | 310 std::vector<std::unique_ptr<CPDF_StreamAcc>> m_StreamArray; |
| 319 uint8_t* m_pData; | 311 uint8_t* m_pData; |
| 320 uint32_t m_Size; | 312 uint32_t m_Size; |
| 321 uint32_t m_CurrentOffset; | 313 uint32_t m_CurrentOffset; |
| 322 std::unique_ptr<CPDF_StreamContentParser> m_pParser; | 314 std::unique_ptr<CPDF_StreamContentParser> m_pParser; |
| 323 }; | 315 }; |
| 324 | 316 |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 }; | 526 }; |
| 535 | 527 |
| 536 CFX_ByteStringC PDF_FindKeyAbbreviationForTesting(const CFX_ByteStringC& abbr); | 528 CFX_ByteStringC PDF_FindKeyAbbreviationForTesting(const CFX_ByteStringC& abbr); |
| 537 CFX_ByteStringC PDF_FindValueAbbreviationForTesting( | 529 CFX_ByteStringC PDF_FindValueAbbreviationForTesting( |
| 538 const CFX_ByteStringC& abbr); | 530 const CFX_ByteStringC& abbr); |
| 539 | 531 |
| 540 void PDF_ReplaceAbbr(CPDF_Object* pObj); | 532 void PDF_ReplaceAbbr(CPDF_Object* pObj); |
| 541 bool IsPathOperator(const uint8_t* buf, size_t len); | 533 bool IsPathOperator(const uint8_t* buf, size_t len); |
| 542 | 534 |
| 543 #endif // CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 535 #endif // CORE_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
| OLD | NEW |