Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cpdf_psengine.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_PSENGINE_H_
8
#
define
CORE_FPDFAPI_PAGE_CPDF_PSENGINE_H_
9
10
#
include
<
stdint
.
h
>
11
12
#
include
<
array
>
13
#
include
<
memory
>
14
#
include
<
vector
>
15
16
#
include
"core/fxcrt/bytestring.h"
17
#
include
"core/fxcrt/span.h"
18
19
class
CPDF_PSEngine
;
20
class
CPDF_PSProc
;
21
class
CPDF_SimpleParser
;
22
23
enum
PDF_PSOP
:
uint8_t
{
24
PSOP_ADD
,
25
PSOP_SUB
,
26
PSOP_MUL
,
27
PSOP_DIV
,
28
PSOP_IDIV
,
29
PSOP_MOD
,
30
PSOP_NEG
,
31
PSOP_ABS
,
32
PSOP_CEILING
,
33
PSOP_FLOOR
,
34
PSOP_ROUND
,
35
PSOP_TRUNCATE
,
36
PSOP_SQRT
,
37
PSOP_SIN
,
38
PSOP_COS
,
39
PSOP_ATAN
,
40
PSOP_EXP
,
41
PSOP_LN
,
42
PSOP_LOG
,
43
PSOP_CVI
,
44
PSOP_CVR
,
45
PSOP_EQ
,
46
PSOP_NE
,
47
PSOP_GT
,
48
PSOP_GE
,
49
PSOP_LT
,
50
PSOP_LE
,
51
PSOP_AND
,
52
PSOP_OR
,
53
PSOP_XOR
,
54
PSOP_NOT
,
55
PSOP_BITSHIFT
,
56
PSOP_TRUE
,
57
PSOP_FALSE
,
58
PSOP_IF
,
59
PSOP_IFELSE
,
60
PSOP_POP
,
61
PSOP_EXCH
,
62
PSOP_DUP
,
63
PSOP_COPY
,
64
PSOP_INDEX
,
65
PSOP_ROLL
,
66
PSOP_PROC
,
67
PSOP_CONST
68
};
69
70
class
CPDF_PSOP
{
71
public
:
72
CPDF_PSOP
();
73
explicit
CPDF_PSOP
(
PDF_PSOP
op);
74
explicit
CPDF_PSOP
(
float
value);
75
~
CPDF_PSOP
();
76
77
bool
Parse
(
CPDF_SimpleParser
* parser,
int
depth);
78
void
Execute
(
CPDF_PSEngine
* pEngine);
79
float
GetFloatValue
()
const
;
80
PDF_PSOP
GetOp
()
const
{
return
m_op; }
81
82
private
:
83
const
PDF_PSOP
m_op;
84
const
float
m_value;
85
std::unique_ptr<CPDF_PSProc> m_proc;
86
};
87
88
class
CPDF_PSProc
{
89
public
:
90
CPDF_PSProc
();
91
~
CPDF_PSProc
();
92
93
bool
Parse
(
CPDF_SimpleParser
* parser,
int
depth);
94
bool
Execute
(
CPDF_PSEngine
* pEngine);
95
96
// These methods are exposed for testing.
97
void
AddOperatorForTesting
(
ByteStringView
word);
98
const
std
::
unique_ptr
<
CPDF_PSOP
>&
last_operator
() {
99
return
m_Operators.back();
100
}
101
102
private
:
103
static
constexpr
int
kMaxDepth = 128;
104
105
void
AddOperator(
ByteStringView
word);
106
107
std::vector<std::unique_ptr<CPDF_PSOP>> m_Operators;
108
};
109
110
class
CPDF_PSEngine
{
111
public
:
112
CPDF_PSEngine
();
113
~
CPDF_PSEngine
();
114
115
bool
Parse
(pdfium::span<
const
uint8_t> input);
116
bool
Execute
();
117
bool
DoOperator
(
PDF_PSOP
op);
118
void
Reset
() { m_StackCount = 0; }
119
void
Push
(
float
value);
120
float
Pop
();
121
int
PopInt
();
122
uint32_t
GetStackSize
()
const
{
return
m_StackCount; }
123
124
private
:
125
static
constexpr
uint32_t kPSEngineStackSize = 100;
126
127
uint32_t m_StackCount = 0;
128
CPDF_PSProc
m_MainProc;
129
std
::array<
float
, kPSEngineStackSize> m_Stack = {};
130
};
131
132
#
endif
// CORE_FPDFAPI_PAGE_CPDF_PSENGINE_H_
CPDF_Array::const_iterator
std::vector< RetainPtr< CPDF_Object > >::const_iterator const_iterator
Definition
cpdf_array.h:29
CPDF_Dictionary::GetIntegerFor
int GetIntegerFor(const ByteString &key) const
Definition
cpdf_dictionary.cpp:133
CPDF_Dictionary::DictMap
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
Definition
cpdf_dictionary.h:31
CPDF_Function
Definition
cpdf_function.h:23
CPDF_Function::m_nOutputs
uint32_t m_nOutputs
Definition
cpdf_function.h:72
CPDF_Function::m_nInputs
uint32_t m_nInputs
Definition
cpdf_function.h:71
CPDF_Function::~CPDF_Function
virtual ~CPDF_Function()
CPDF_Function::Init
bool Init(const CPDF_Object *pObj, VisitedSet *pVisited)
Definition
cpdf_function.cpp:88
CPDF_Function::CPDF_Function
CPDF_Function(Type type)
Definition
cpdf_function.cpp:84
CPDF_Function::m_Type
const Type m_Type
Definition
cpdf_function.h:70
CPDF_Function::Call
std::optional< uint32_t > Call(pdfium::span< const float > inputs, pdfium::span< float > results) const
Definition
cpdf_function.cpp:131
CPDF_Function::Type
Type
Definition
cpdf_function.h:26
CPDF_Function::Type::kType0Sampled
@ kType0Sampled
Definition
cpdf_function.h:28
CPDF_Function::Type::kType2ExponentialInterpolation
@ kType2ExponentialInterpolation
Definition
cpdf_function.h:29
CPDF_Function::Type::kType3Stitching
@ kType3Stitching
Definition
cpdf_function.h:30
CPDF_Function::Type::kTypeInvalid
@ kTypeInvalid
Definition
cpdf_function.h:27
CPDF_Function::Type::kType4PostScript
@ kType4PostScript
Definition
cpdf_function.h:31
CPDF_Function::Interpolate
float Interpolate(float x, float xmin, float xmax, float ymin, float ymax) const
Definition
cpdf_function.cpp:163
CPDF_Object
Definition
cpdf_object.h:50
CPDF_Object::GetDict
RetainPtr< const CPDF_Dictionary > GetDict() const
Definition
cpdf_object.cpp:79
CPDF_Object::AsStream
const CPDF_Stream * AsStream() const
Definition
cpdf_object.cpp:155
CPDF_PSEngine
Definition
cpdf_psengine.h:110
CPDF_PSEngine::DoOperator
bool DoOperator(PDF_PSOP op)
Definition
cpdf_psengine.cpp:213
CPDF_PSEngine::PopInt
int PopInt()
Definition
cpdf_psengine.cpp:204
CPDF_PSEngine::Parse
bool Parse(pdfium::span< const uint8_t > input)
Definition
cpdf_psengine.cpp:208
CPDF_PSEngine::Reset
void Reset()
Definition
cpdf_psengine.h:118
CPDF_PSEngine::GetStackSize
uint32_t GetStackSize() const
Definition
cpdf_psengine.h:122
CPDF_PSEngine::Push
void Push(float value)
Definition
cpdf_psengine.cpp:195
CPDF_PSEngine::CPDF_PSEngine
CPDF_PSEngine()
CPDF_PSEngine::Execute
bool Execute()
Definition
cpdf_psengine.cpp:113
CPDF_PSEngine::Pop
float Pop()
Definition
cpdf_psengine.cpp:200
CPDF_PSEngine::~CPDF_PSEngine
~CPDF_PSEngine()
CPDF_PSFunc::CPDF_PSFunc
CPDF_PSFunc()
Definition
cpdf_psfunc.cpp:12
CPDF_PSFunc::v_Init
bool v_Init(const CPDF_Object *pObj, VisitedSet *pVisited) override
Definition
cpdf_psfunc.cpp:16
CPDF_PSFunc::~CPDF_PSFunc
~CPDF_PSFunc() override
CPDF_PSFunc::v_Call
bool v_Call(pdfium::span< const float > inputs, pdfium::span< float > results) const override
Definition
cpdf_psfunc.cpp:23
CPDF_PSOP
Definition
cpdf_psengine.h:70
CPDF_PSOP::Execute
void Execute(CPDF_PSEngine *pEngine)
Definition
cpdf_psengine.cpp:103
CPDF_PSOP::GetOp
PDF_PSOP GetOp() const
Definition
cpdf_psengine.h:80
CPDF_PSOP::GetFloatValue
float GetFloatValue() const
Definition
cpdf_psengine.cpp:108
CPDF_PSOP::Parse
bool Parse(CPDF_SimpleParser *parser, int depth)
Definition
cpdf_psengine.cpp:98
CPDF_PSOP::~CPDF_PSOP
~CPDF_PSOP()
CPDF_PSOP::CPDF_PSOP
CPDF_PSOP(float value)
Definition
cpdf_psengine.cpp:94
CPDF_PSOP::CPDF_PSOP
CPDF_PSOP()
Definition
cpdf_psengine.cpp:86
CPDF_PSOP::CPDF_PSOP
CPDF_PSOP(PDF_PSOP op)
Definition
cpdf_psengine.cpp:89
CPDF_PSProc
Definition
cpdf_psengine.h:88
CPDF_PSProc::Execute
bool Execute(CPDF_PSEngine *pEngine)
Definition
cpdf_psengine.cpp:144
CPDF_PSProc::~CPDF_PSProc
~CPDF_PSProc()
CPDF_PSProc::last_operator
const std::unique_ptr< CPDF_PSOP > & last_operator()
Definition
cpdf_psengine.h:98
CPDF_PSProc::Parse
bool Parse(CPDF_SimpleParser *parser, int depth)
Definition
cpdf_psengine.cpp:121
CPDF_PSProc::CPDF_PSProc
CPDF_PSProc()
CPDF_PSProc::AddOperatorForTesting
void AddOperatorForTesting(ByteStringView word)
Definition
cpdf_psengine.cpp:175
CPDF_SimpleParser
Definition
cpdf_simple_parser.h:17
fxcrt::RetainPtr
Definition
retain_ptr.h:28
pdfium::CFDETextOutLargeBitmapTest
Definition
cfde_textout_unittest.cpp:117
PDF_PSOP
PDF_PSOP
Definition
cpdf_psengine.h:23
PSOP_COS
@ PSOP_COS
Definition
cpdf_psengine.h:38
PSOP_FLOOR
@ PSOP_FLOOR
Definition
cpdf_psengine.h:33
PSOP_LT
@ PSOP_LT
Definition
cpdf_psengine.h:49
PSOP_LOG
@ PSOP_LOG
Definition
cpdf_psengine.h:42
PSOP_DIV
@ PSOP_DIV
Definition
cpdf_psengine.h:27
PSOP_DUP
@ PSOP_DUP
Definition
cpdf_psengine.h:62
PSOP_GE
@ PSOP_GE
Definition
cpdf_psengine.h:48
PSOP_NEG
@ PSOP_NEG
Definition
cpdf_psengine.h:30
PSOP_LN
@ PSOP_LN
Definition
cpdf_psengine.h:41
PSOP_OR
@ PSOP_OR
Definition
cpdf_psengine.h:52
PSOP_EQ
@ PSOP_EQ
Definition
cpdf_psengine.h:45
PSOP_MOD
@ PSOP_MOD
Definition
cpdf_psengine.h:29
PSOP_IDIV
@ PSOP_IDIV
Definition
cpdf_psengine.h:28
PSOP_ATAN
@ PSOP_ATAN
Definition
cpdf_psengine.h:39
PSOP_CVR
@ PSOP_CVR
Definition
cpdf_psengine.h:44
PSOP_SUB
@ PSOP_SUB
Definition
cpdf_psengine.h:25
PSOP_EXP
@ PSOP_EXP
Definition
cpdf_psengine.h:40
PSOP_ADD
@ PSOP_ADD
Definition
cpdf_psengine.h:24
PSOP_ROUND
@ PSOP_ROUND
Definition
cpdf_psengine.h:34
PSOP_CONST
@ PSOP_CONST
Definition
cpdf_psengine.h:67
PSOP_IF
@ PSOP_IF
Definition
cpdf_psengine.h:58
PSOP_NE
@ PSOP_NE
Definition
cpdf_psengine.h:46
PSOP_PROC
@ PSOP_PROC
Definition
cpdf_psengine.h:66
PSOP_FALSE
@ PSOP_FALSE
Definition
cpdf_psengine.h:57
PSOP_TRUE
@ PSOP_TRUE
Definition
cpdf_psengine.h:56
PSOP_MUL
@ PSOP_MUL
Definition
cpdf_psengine.h:26
PSOP_ROLL
@ PSOP_ROLL
Definition
cpdf_psengine.h:65
PSOP_AND
@ PSOP_AND
Definition
cpdf_psengine.h:51
PSOP_GT
@ PSOP_GT
Definition
cpdf_psengine.h:47
PSOP_CEILING
@ PSOP_CEILING
Definition
cpdf_psengine.h:32
PSOP_POP
@ PSOP_POP
Definition
cpdf_psengine.h:60
PSOP_EXCH
@ PSOP_EXCH
Definition
cpdf_psengine.h:61
PSOP_BITSHIFT
@ PSOP_BITSHIFT
Definition
cpdf_psengine.h:55
PSOP_SQRT
@ PSOP_SQRT
Definition
cpdf_psengine.h:36
PSOP_COPY
@ PSOP_COPY
Definition
cpdf_psengine.h:63
PSOP_IFELSE
@ PSOP_IFELSE
Definition
cpdf_psengine.h:59
PSOP_NOT
@ PSOP_NOT
Definition
cpdf_psengine.h:54
PSOP_ABS
@ PSOP_ABS
Definition
cpdf_psengine.h:31
PSOP_CVI
@ PSOP_CVI
Definition
cpdf_psengine.h:43
PSOP_SIN
@ PSOP_SIN
Definition
cpdf_psengine.h:37
PSOP_TRUNCATE
@ PSOP_TRUNCATE
Definition
cpdf_psengine.h:35
PSOP_XOR
@ PSOP_XOR
Definition
cpdf_psengine.h:53
PSOP_LE
@ PSOP_LE
Definition
cpdf_psengine.h:50
PSOP_INDEX
@ PSOP_INDEX
Definition
cpdf_psengine.h:64
fxcrt
Definition
stl_util.h:17
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
ByteStringView
fxcrt::ByteStringView ByteStringView
Definition
string_view_template.h:325
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fpdfapi
page
cpdf_psengine.h
Generated on
for Qt by
1.18.0