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_syntax_parser.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_PARSER_CPDF_SYNTAX_PARSER_H_
8
#
define
CORE_FPDFAPI_PARSER_CPDF_SYNTAX_PARSER_H_
9
10
#
include
<
stdint
.
h
>
11
12
#
include
<
array
>
13
#
include
<
memory
>
14
#
include
<
vector
>
15
16
#
include
"core/fpdfapi/parser/cpdf_stream.h"
17
#
include
"core/fxcrt/data_vector.h"
18
#
include
"core/fxcrt/fx_types.h"
19
#
include
"core/fxcrt/retain_ptr.h"
20
#
include
"core/fxcrt/span.h"
21
#
include
"core/fxcrt/string_pool_template.h"
22
#
include
"core/fxcrt/unowned_ptr.h"
23
#
include
"core/fxcrt/weak_ptr.h"
24
25
class
CPDF_Dictionary
;
26
class
CPDF_IndirectObjectHolder
;
27
class
CPDF_Object
;
28
class
CPDF_ReadValidator
;
29
class
CPDF_Stream;
30
class
IFX_SeekableReadStream
;
31
32
class
CPDF_SyntaxParser
{
33
public
:
34
enum
class
ParseType
:
bool
{
kStrict
,
kLoose
};
35
36
struct
WordResult
{
37
ByteString
word
;
38
bool
is_number
;
39
};
40
41
static
std
::
unique_ptr
<
CPDF_SyntaxParser
>
CreateForTesting
(
42
RetainPtr
<
IFX_SeekableReadStream
> pFileAccess,
43
FX_FILESIZE
HeaderOffset);
44
45
explicit
CPDF_SyntaxParser
(
RetainPtr
<
IFX_SeekableReadStream
> pFileAccess);
46
CPDF_SyntaxParser
(
RetainPtr
<
CPDF_ReadValidator
> pValidator,
47
FX_FILESIZE
HeaderOffset);
48
~
CPDF_SyntaxParser
();
49
50
void
SetReadBufferSize
(uint32_t read_buffer_size) {
51
m_ReadBufferSize = read_buffer_size;
52
}
53
54
FX_FILESIZE
GetPos
()
const
{
return
m_Pos; }
55
void
SetPos
(
FX_FILESIZE
pos);
56
57
RetainPtr
<
CPDF_Object
>
GetObjectBody
(
CPDF_IndirectObjectHolder
* pObjList);
58
RetainPtr
<
CPDF_Object
>
GetIndirectObject
(
CPDF_IndirectObjectHolder
* pObjList,
59
ParseType
parse_type);
60
61
ByteString
GetKeyword
();
62
void
ToNextLine
();
63
void
ToNextWord
();
64
void
RecordingToNextWord
();
65
bool
BackwardsSearchToWord
(
ByteStringView
word,
FX_FILESIZE
limit);
66
FX_FILESIZE
FindTag
(
ByteStringView
tag);
67
bool
ReadBlock
(pdfium::span<uint8_t> buffer);
68
bool
GetCharAt
(
FX_FILESIZE
pos, uint8_t& ch);
69
WordResult
GetNextWord
();
70
ByteString
PeekNextWord
();
71
72
RetainPtr
<
CPDF_ReadValidator
>
GetValidator
()
const
;
73
uint32_t
GetDirectNum
();
74
bool
GetNextChar
(uint8_t& ch);
75
76
// The document size may be smaller than the file size.
77
// The syntax parser use position relative to document
78
// offset (|m_HeaderOffset|).
79
// The document size will be FileSize - "Header offset".
80
// All offsets was readed from document, should not be great than document
81
// size. Use it for checks instead of real file size.
82
FX_FILESIZE
GetDocumentSize
()
const
;
83
84
ByteString
ReadString
();
85
DataVector
<
uint8_t
>
ReadHexString
();
86
87
void
SetTrailerEnds
(std::vector<
unsigned
int
>* trailer_ends) {
88
m_TrailerEnds = trailer_ends;
89
}
90
91
private
:
92
enum
class
WordType :
bool
{ kWord, kNumber };
93
94
friend
class
CPDF_DataAvail;
95
friend
class
cpdf_syntax_parser_ReadHexString_Test;
96
97
static
constexpr
int
kParserMaxRecursionDepth = 64;
98
static
int
s_CurrentRecursionDepth;
99
100
bool
ReadBlockAt(
FX_FILESIZE
read_pos);
101
bool
GetCharAtBackward(
FX_FILESIZE
pos, uint8_t* ch);
102
WordType GetNextWordInternal();
103
bool
IsWholeWord(
FX_FILESIZE
startpos,
104
FX_FILESIZE
limit,
105
ByteStringView
tag,
106
bool
checkKeyword);
107
108
unsigned
int
ReadEOLMarkers(
FX_FILESIZE
pos);
109
FX_FILESIZE
FindWordPos(
ByteStringView
word);
110
FX_FILESIZE
FindStreamEndPos();
111
RetainPtr
<CPDF_Stream> ReadStream(
RetainPtr
<
CPDF_Dictionary
> pDict);
112
113
bool
IsPositionRead(
FX_FILESIZE
pos)
const
;
114
115
RetainPtr
<
CPDF_Object
> GetObjectBodyInternal(
116
CPDF_IndirectObjectHolder
* pObjList,
117
ParseType
parse_type);
118
119
RetainPtr
<
CPDF_ReadValidator
> m_pFileAccess;
120
// The syntax parser use position relative to header offset.
121
// The header contains at file start, and can follow after some stuff. We
122
// ignore this stuff.
123
const
FX_FILESIZE
m_HeaderOffset;
124
const
FX_FILESIZE
m_FileLen;
125
FX_FILESIZE
m_Pos = 0;
126
WeakPtr<ByteStringPool> m_pPool;
127
DataVector<uint8_t> m_pFileBuf;
128
FX_FILESIZE
m_BufOffset = 0;
129
uint32_t m_WordSize = 0;
130
uint32_t m_ReadBufferSize = CPDF_Stream
::
kFileBufSize
;
131
std
::array<uint8_t, 257> m_WordBuffer = {};
132
133
// The syntax parser records traversed trailer end byte offsets here.
134
UnownedPtr<std::vector<
unsigned
int
>> m_TrailerEnds;
135
};
136
137
#
endif
// CORE_FPDFAPI_PARSER_CPDF_SYNTAX_PARSER_H_
ByteString
fxcrt::ByteString ByteString
Definition
bytestring.h:180
CFDF_Document::CreateNewDoc
static std::unique_ptr< CFDF_Document > CreateNewDoc()
Definition
cfdf_document.cpp:24
CFDF_Document::GetRoot
const CPDF_Dictionary * GetRoot() const
Definition
cfdf_document.h:29
CFDF_Document::ParseMemory
static std::unique_ptr< CFDF_Document > ParseMemory(pdfium::span< const uint8_t > span)
Definition
cfdf_document.cpp:31
CFDF_Document::GetMutableRoot
RetainPtr< CPDF_Dictionary > GetMutableRoot() const
Definition
cfdf_document.h:30
CFDF_Document::CFDF_Document
CFDF_Document()
CFDF_Document::~CFDF_Document
~CFDF_Document() override
CFDF_Document::WriteToString
ByteString WriteToString() const
Definition
cfdf_document.cpp:81
CPDF_Dictionary::DictMap
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
Definition
cpdf_dictionary.h:31
CPDF_IndirectObjectHolder
Definition
cpdf_indirect_object_holder.h:21
CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration
bool ReplaceIndirectObjectIfHigherGeneration(uint32_t objnum, RetainPtr< CPDF_Object > pObj)
Definition
cpdf_indirect_object_holder.cpp:95
CPDF_Object
Definition
cpdf_object.h:50
CPDF_ReadValidator
Definition
cpdf_read_validator.h:14
CPDF_Stream::kFileBufSize
static constexpr int kFileBufSize
Definition
cpdf_stream.h:25
CPDF_SyntaxParser
Definition
cpdf_syntax_parser.h:32
CPDF_SyntaxParser::ParseType
ParseType
Definition
cpdf_syntax_parser.h:34
CPDF_SyntaxParser::ParseType::kStrict
@ kStrict
Definition
cpdf_syntax_parser.h:34
CPDF_SyntaxParser::ParseType::kLoose
@ kLoose
Definition
cpdf_syntax_parser.h:34
CPDF_SyntaxParser::GetIndirectObject
RetainPtr< CPDF_Object > GetIndirectObject(CPDF_IndirectObjectHolder *pObjList, ParseType parse_type)
Definition
cpdf_syntax_parser.cpp:617
CPDF_SyntaxParser::ReadString
ByteString ReadString()
Definition
cpdf_syntax_parser.cpp:239
CPDF_SyntaxParser::CreateForTesting
static std::unique_ptr< CPDF_SyntaxParser > CreateForTesting(RetainPtr< IFX_SeekableReadStream > pFileAccess, FX_FILESIZE HeaderOffset)
Definition
cpdf_syntax_parser.cpp:85
CPDF_SyntaxParser::ReadHexString
DataVector< uint8_t > ReadHexString()
Definition
cpdf_syntax_parser.cpp:325
CPDF_SyntaxParser::BackwardsSearchToWord
bool BackwardsSearchToWord(ByteStringView word, FX_FILESIZE limit)
Definition
cpdf_syntax_parser.cpp:879
CPDF_SyntaxParser::GetValidator
RetainPtr< CPDF_ReadValidator > GetValidator() const
Definition
cpdf_syntax_parser.cpp:847
CPDF_SyntaxParser::PeekNextWord
ByteString PeekNextWord()
Definition
cpdf_syntax_parser.cpp:479
CPDF_SyntaxParser::RecordingToNextWord
void RecordingToNextWord()
Definition
cpdf_syntax_parser.cpp:415
CPDF_SyntaxParser::CPDF_SyntaxParser
CPDF_SyntaxParser(RetainPtr< IFX_SeekableReadStream > pFileAccess)
Definition
cpdf_syntax_parser.cpp:93
CPDF_SyntaxParser::~CPDF_SyntaxParser
~CPDF_SyntaxParser()
CPDF_SyntaxParser::SetReadBufferSize
void SetReadBufferSize(uint32_t read_buffer_size)
Definition
cpdf_syntax_parser.h:50
CPDF_SyntaxParser::GetDirectNum
uint32_t GetDirectNum()
Definition
cpdf_syntax_parser.cpp:839
CPDF_SyntaxParser::FindTag
FX_FILESIZE FindTag(ByteStringView tag)
Definition
cpdf_syntax_parser.cpp:913
CPDF_SyntaxParser::GetPos
FX_FILESIZE GetPos() const
Definition
cpdf_syntax_parser.h:54
CPDF_SyntaxParser::GetNextWord
WordResult GetNextWord()
Definition
cpdf_syntax_parser.cpp:469
CPDF_SyntaxParser::GetDocumentSize
FX_FILESIZE GetDocumentSize() const
Definition
cpdf_syntax_parser.cpp:148
CPDF_SyntaxParser::CPDF_SyntaxParser
CPDF_SyntaxParser(RetainPtr< CPDF_ReadValidator > pValidator, FX_FILESIZE HeaderOffset)
Definition
cpdf_syntax_parser.cpp:100
CPDF_SyntaxParser::GetNextChar
bool GetNextChar(uint8_t &ch)
Definition
cpdf_syntax_parser.cpp:135
CPDF_SyntaxParser::ReadBlock
bool ReadBlock(pdfium::span< uint8_t > buffer)
Definition
cpdf_syntax_parser.cpp:168
CPDF_SyntaxParser::SetPos
void SetPos(FX_FILESIZE pos)
Definition
cpdf_syntax_parser.cpp:488
CPDF_SyntaxParser::ToNextWord
void ToNextWord()
Definition
cpdf_syntax_parser.cpp:375
CPDF_SyntaxParser::ToNextLine
void ToNextLine()
Definition
cpdf_syntax_parser.cpp:360
CPDF_SyntaxParser::GetObjectBody
RetainPtr< CPDF_Object > GetObjectBody(CPDF_IndirectObjectHolder *pObjList)
Definition
cpdf_syntax_parser.cpp:493
CPDF_SyntaxParser::SetTrailerEnds
void SetTrailerEnds(std::vector< unsigned int > *trailer_ends)
Definition
cpdf_syntax_parser.h:87
CPDF_SyntaxParser::GetKeyword
ByteString GetKeyword()
Definition
cpdf_syntax_parser.cpp:484
CPDF_SyntaxParser::GetCharAt
bool GetCharAt(FX_FILESIZE pos, uint8_t &ch)
Definition
cpdf_syntax_parser.cpp:110
IFX_SeekableReadStream
Definition
fx_stream.h:52
fxcrt::ByteString::ByteString
ByteString()=default
fxcrt::RetainPtr
Definition
retain_ptr.h:28
pdfium::CFDETextOutLargeBitmapTest
Definition
cfde_textout_unittest.cpp:117
FX_FILESIZE
#define FX_FILESIZE
Definition
fx_types.h:19
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
ByteStringView
fxcrt::ByteStringView ByteStringView
Definition
string_view_template.h:325
CPDF_SyntaxParser::WordResult
Definition
cpdf_syntax_parser.h:36
CPDF_SyntaxParser::WordResult::is_number
bool is_number
Definition
cpdf_syntax_parser.h:38
CPDF_SyntaxParser::WordResult::word
ByteString word
Definition
cpdf_syntax_parser.h:37
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fpdfapi
parser
cpdf_syntax_parser.h
Generated on
for Qt by
1.18.0