Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_contentparser.h
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef CORE_FPDFAPI_PAGE_CPDF_CONTENTPARSER_H_
8#define CORE_FPDFAPI_PAGE_CPDF_CONTENTPARSER_H_
9
10#include <stdint.h>
11
12#include <memory>
13#include <vector>
14
15#include "core/fpdfapi/page/cpdf_form.h"
16#include "core/fpdfapi/page/cpdf_pageobjectholder.h"
17#include "core/fpdfapi/page/cpdf_streamcontentparser.h"
18#include "core/fxcrt/fixed_size_data_vector.h"
19#include "core/fxcrt/raw_span.h"
20#include "core/fxcrt/retain_ptr.h"
21#include "core/fxcrt/unowned_ptr.h"
22#include "third_party/abseil-cpp/absl/types/variant.h"
23
24class CPDF_AllStates;
25class CPDF_Array;
26class CPDF_Page;
28class CPDF_Stream;
29class CPDF_StreamAcc;
30class CPDF_Type3Char;
32
34 public:
35 explicit CPDF_ContentParser(CPDF_Page* pPage);
36 CPDF_ContentParser(RetainPtr<const CPDF_Stream> pStream,
37 CPDF_PageObjectHolder* pPageObjectHolder,
38 const CPDF_AllStates* pGraphicStates,
39 const CFX_Matrix* pParentMatrix,
40 CPDF_Type3Char* pType3Char,
41 CPDF_Form::RecursionState* recursion_state);
43
45
46 // Returns whether to continue or not.
47 bool Continue(PauseIndicatorIface* pPause);
48
49 private:
50 enum class Stage : uint8_t {
51 kGetContent = 1,
52 kPrepareContent,
53 kParse,
54 kCheckClip,
55 kComplete,
56 };
57
58 Stage GetContent();
59 Stage PrepareContent();
60 Stage Parse();
61 Stage CheckClip();
62
63 void HandlePageContentStream(const CPDF_Stream* pStream);
64 bool HandlePageContentArray(const CPDF_Array* pArray);
65 void HandlePageContentFailure();
66
67 bool is_owned() const {
68 return absl::holds_alternative<FixedSizeDataVector<uint8_t>>(m_Data);
69 }
70 pdfium::span<const uint8_t> GetData() const;
71
72 Stage m_CurrentStage;
73 UnownedPtr<CPDF_PageObjectHolder> const m_pPageObjectHolder;
74 UnownedPtr<CPDF_Type3Char> m_pType3Char; // Only used when parsing forms.
75 RetainPtr<CPDF_StreamAcc> m_pSingleStream;
76 std::vector<RetainPtr<CPDF_StreamAcc>> m_StreamArray;
77 std::vector<uint32_t> m_StreamSegmentOffsets;
79 m_Data;
80 uint32_t m_nStreams = 0;
81 uint32_t m_CurrentOffset = 0;
82 // Only used when parsing pages.
83 CPDF_Form::RecursionState m_RecursionState;
84
85 // Must not outlive |m_RecursionState|.
86 std::unique_ptr<CPDF_StreamContentParser> m_pParser;
87};
88
89#endif // CORE_FPDFAPI_PAGE_CPDF_CONTENTPARSER_H_
#define DCHECK
Definition check.h:33
#define DCHECK_EQ(x, y)
Definition check_op.h:17
CFX_FloatRect & operator=(const CFX_FloatRect &that)=default
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
void Concat(const CFX_Matrix &right)
const CFX_Matrix & current_transformation_matrix() const
std::vector< RetainPtr< CPDF_Object > >::const_iterator const_iterator
Definition cpdf_array.h:29
CPDF_ContentParser(CPDF_Page *pPage)
bool Continue(PauseIndicatorIface *pPause)
CPDF_PageObjectHolder::CTMMap TakeAllCTMs()
CPDF_ContentParser(RetainPtr< const CPDF_Stream > pStream, CPDF_PageObjectHolder *pPageObjectHolder, const CPDF_AllStates *pGraphicStates, const CFX_Matrix *pParentMatrix, CPDF_Type3Char *pType3Char, CPDF_Form::RecursionState *recursion_state)
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
void SetBlendType(BlendMode type)
void SetFillAlpha(float alpha)
void SetStrokeAlpha(float alpha)
void SetSoftMask(RetainPtr< CPDF_Dictionary > pDict)
CPDF_Document * GetDocument() const override
Definition cpdf_page.cpp:51
bool HasRef() const
Definition cpdf_path.h:22
void AppendFloatRect(const CFX_FloatRect &rect)
Definition cpdf_path.cpp:49
void Emplace()
Definition cpdf_path.h:21
void Transform(const CFX_Matrix &matrix)
Definition cpdf_path.cpp:41
virtual bool NeedToPauseNow()=0
BlendMode
Definition fx_dib.h:119
@ kNormal
Definition fx_dib.h:120
pdfium::CheckedNumeric< uint32_t > FX_SAFE_UINT32