1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:07:36 +00:00

LibPDF: Extract Parser::parse_dict_contents_until()

No behavior change.
This commit is contained in:
Nico Weber 2023-12-09 22:06:51 -05:00 committed by Andreas Kling
parent 3b3558865c
commit 0912896ae0
2 changed files with 13 additions and 5 deletions

View file

@ -404,23 +404,30 @@ PDFErrorOr<NonnullRefPtr<ArrayObject>> Parser::parse_array()
return make_object<ArrayObject>(values); return make_object<ArrayObject>(values);
} }
PDFErrorOr<NonnullRefPtr<DictObject>> Parser::parse_dict() PDFErrorOr<HashMap<DeprecatedFlyString, Value>> Parser::parse_dict_contents_until(char const* end)
{ {
if (!m_reader.consume('<') || !m_reader.consume('<'))
return error("Expected dict to start with \"<<\"");
m_reader.consume_whitespace(); m_reader.consume_whitespace();
HashMap<DeprecatedFlyString, Value> map; HashMap<DeprecatedFlyString, Value> map;
while (!m_reader.done()) { while (!m_reader.done()) {
parse_comment(); parse_comment();
if (m_reader.matches(">>")) if (m_reader.matches(end))
break; break;
auto name = TRY(parse_name())->name(); auto name = TRY(parse_name())->name();
auto value = TRY(parse_value()); auto value = TRY(parse_value());
map.set(name, value); map.set(name, value);
} }
return map;
}
PDFErrorOr<NonnullRefPtr<DictObject>> Parser::parse_dict()
{
if (!m_reader.consume('<') || !m_reader.consume('<'))
return error("Expected dict to start with \"<<\"");
HashMap<DeprecatedFlyString, Value> map = TRY(parse_dict_contents_until(">>"));
if (!m_reader.consume('>') || !m_reader.consume('>')) if (!m_reader.consume('>') || !m_reader.consume('>'))
return error("Expected dict to end with \">>\""); return error("Expected dict to end with \">>\"");
m_reader.consume_whitespace(); m_reader.consume_whitespace();

View file

@ -53,6 +53,7 @@ public:
PDFErrorOr<DeprecatedString> parse_literal_string(); PDFErrorOr<DeprecatedString> parse_literal_string();
PDFErrorOr<DeprecatedString> parse_hex_string(); PDFErrorOr<DeprecatedString> parse_hex_string();
PDFErrorOr<NonnullRefPtr<ArrayObject>> parse_array(); PDFErrorOr<NonnullRefPtr<ArrayObject>> parse_array();
PDFErrorOr<HashMap<DeprecatedFlyString, Value>> parse_dict_contents_until(char const*);
PDFErrorOr<NonnullRefPtr<DictObject>> parse_dict(); PDFErrorOr<NonnullRefPtr<DictObject>> parse_dict();
PDFErrorOr<NonnullRefPtr<StreamObject>> parse_stream(NonnullRefPtr<DictObject> dict); PDFErrorOr<NonnullRefPtr<StreamObject>> parse_stream(NonnullRefPtr<DictObject> dict);
PDFErrorOr<Vector<Operator>> parse_operators(); PDFErrorOr<Vector<Operator>> parse_operators();