7#ifndef CORE_FPDFAPI_PARSER_CPDF_SYNTAX_PARSER_H_
8#define CORE_FPDFAPI_PARSER_CPDF_SYNTAX_PARSER_H_
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"
51 m_ReadBufferSize = read_buffer_size;
67 bool ReadBlock(pdfium::span<uint8_t> buffer);
88 m_TrailerEnds = trailer_ends;
92 enum class WordType :
bool { kWord, kNumber };
94 friend class CPDF_DataAvail;
95 friend class cpdf_syntax_parser_ReadHexString_Test;
97 static constexpr int kParserMaxRecursionDepth = 64;
98 static int s_CurrentRecursionDepth;
101 bool GetCharAtBackward(
FX_FILESIZE pos, uint8_t* ch);
102 WordType GetNextWordInternal();
126 WeakPtr<ByteStringPool> m_pPool;
127 DataVector<uint8_t> m_pFileBuf;
129 uint32_t m_WordSize = 0;
131 std::array<uint8_t, 257> m_WordBuffer = {};
134 UnownedPtr<std::vector<
unsigned int>> m_TrailerEnds;
fxcrt::ByteString ByteString
static std::unique_ptr< CFDF_Document > CreateNewDoc()
const CPDF_Dictionary * GetRoot() const
static std::unique_ptr< CFDF_Document > ParseMemory(pdfium::span< const uint8_t > span)
RetainPtr< CPDF_Dictionary > GetMutableRoot() const
~CFDF_Document() override
ByteString WriteToString() const
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
bool ReplaceIndirectObjectIfHigherGeneration(uint32_t objnum, RetainPtr< CPDF_Object > pObj)
static constexpr int kFileBufSize
RetainPtr< CPDF_Object > GetIndirectObject(CPDF_IndirectObjectHolder *pObjList, ParseType parse_type)
static std::unique_ptr< CPDF_SyntaxParser > CreateForTesting(RetainPtr< IFX_SeekableReadStream > pFileAccess, FX_FILESIZE HeaderOffset)
DataVector< uint8_t > ReadHexString()
bool BackwardsSearchToWord(ByteStringView word, FX_FILESIZE limit)
RetainPtr< CPDF_ReadValidator > GetValidator() const
ByteString PeekNextWord()
void RecordingToNextWord()
CPDF_SyntaxParser(RetainPtr< IFX_SeekableReadStream > pFileAccess)
void SetReadBufferSize(uint32_t read_buffer_size)
FX_FILESIZE FindTag(ByteStringView tag)
FX_FILESIZE GetPos() const
FX_FILESIZE GetDocumentSize() const
CPDF_SyntaxParser(RetainPtr< CPDF_ReadValidator > pValidator, FX_FILESIZE HeaderOffset)
bool GetNextChar(uint8_t &ch)
bool ReadBlock(pdfium::span< uint8_t > buffer)
void SetPos(FX_FILESIZE pos)
RetainPtr< CPDF_Object > GetObjectBody(CPDF_IndirectObjectHolder *pObjList)
void SetTrailerEnds(std::vector< unsigned int > *trailer_ends)
bool GetCharAt(FX_FILESIZE pos, uint8_t &ch)
fxcrt::ByteStringView ByteStringView