7#include "core/fpdfapi/parser/cpdf_simple_parser.h"
13#include "core/fpdfapi/parser/fpdf_parser_utility.h"
14#include "core/fxcrt/check_op.h"
22 std::optional<uint8_t> start_char = SkipSpacesAndComments();
23 if (!start_char.has_value()) {
24 return ByteStringView();
28 uint32_t start_position = cur_position_ - 1;
29 CHECK_LT(start_position, data_.size());
31 if (!PDFCharIsDelimiter(start_char.value())) {
32 return HandleNonDelimiter();
35 switch (start_char.value()) {
39 return HandleBeginAngleBracket();
41 return HandleEndAngleBracket();
43 return HandleParentheses();
45 return GetDataToCurrentPosition(start_position);
50 uint32_t start_position)
const {
51 return ByteStringView(
52 data_.subspan(start_position, cur_position_ - start_position));
57 if (cur_position_ >= data_.size()) {
62 uint8_t cur_char = data_[cur_position_++];
64 if (cur_position_ >= data_.size()) {
67 cur_char = data_[cur_position_++];
70 if (cur_char !=
'%') {
76 if (cur_position_ >= data_.size()) {
80 cur_char = data_[cur_position_++];
89 uint32_t start_position = cur_position_ - 1;
90 while (cur_position_ < data_.size()) {
91 uint8_t cur_char = data_[cur_position_];
94 return GetDataToCurrentPosition(start_position);
98 return ByteStringView();
102 uint32_t start_position = cur_position_ - 1;
103 if (cur_position_ >= data_.size()) {
104 return GetDataToCurrentPosition(start_position);
107 uint8_t cur_char = data_[cur_position_++];
109 if (cur_char ==
'<') {
110 return GetDataToCurrentPosition(start_position);
114 while (cur_position_ < data_.size() && cur_char !=
'>') {
115 cur_char = data_[cur_position_++];
117 return GetDataToCurrentPosition(start_position);
121 uint32_t start_position = cur_position_ - 1;
122 if (cur_position_ < data_.size() && data_[cur_position_] ==
'>') {
125 return GetDataToCurrentPosition(start_position);
129 uint32_t start_position = cur_position_ - 1;
131 while (cur_position_ < data_.size() && level > 0) {
132 uint8_t cur_char = data_[cur_position_++];
133 if (cur_char ==
'(') {
135 }
else if (cur_char ==
')') {
139 return GetDataToCurrentPosition(start_position);
143 uint32_t start_position = cur_position_ - 1;
144 while (cur_position_ < data_.size()) {
145 uint8_t cur_char = data_[cur_position_];
151 return GetDataToCurrentPosition(start_position);
CPDF_SimpleParser(pdfium::span< const uint8_t > input)
bool PDFCharIsWhitespace(uint8_t c)
bool PDFCharIsDelimiter(uint8_t c)
bool PDFCharIsLineEnding(uint8_t c)
fxcrt::ByteStringView ByteStringView