From 11d8191be872465a09f858df998bc090d5c03ba9 Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Fri, 13 Jan 2023 09:58:32 +0000 Subject: [PATCH] remove elemr and elemd If we are using packrat, we can use objs = MANY_WS(obj) for the object streams as well. --- pdf.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/pdf.c b/pdf.c index 71b606e..5fea322 100644 --- a/pdf.c +++ b/pdf.c @@ -1079,7 +1079,7 @@ validate_dict_(HParseResult *p, void *u) return true; } -#define act_array_ h_act_flatten +#define act_objs h_act_flatten HParsedToken * act_shortlength(const HParseResult *p, void *u) @@ -2245,7 +2245,7 @@ HParser *p_ahexstream; HParser *p_rldstring; HParser *p_ws; HParser *p_wel; -HParser *p_elemr; +HParser *p_objs; HParser *p_npair; HParser *p_bytes; HParser *p_textstream; @@ -2414,22 +2414,11 @@ init_parser(struct Env *aux) h_bind_indirect(dict, dict_); /* arrays */ - H_RULE(elemd, h_indirect()); /* elements following a delimiter */ - H_RULE(elemr, h_indirect()); /* elements following a regular char */ + H_ARULE(objs, MANY_WS(obj)); H_AVDRULE(array_begin, lbrack, aux); /* semantic action and validation implementing a limit on how deeply arrays can be nested */ H_AVDRULE(array_end, rbrack, aux); /* nesting limit and counter underflow check */ - H_ARULE(array_, h_middle(array_begin, MANY_WS(obj), array_end)); - H_RULE(elemd_, CHX(SEQ(ws, dobj, elemd), - SEQ(ws, name, elemr), - SEQ(ws, robj, elemr), - ws)); - H_RULE(elemr_, CHX(SEQ(ws, dobj, elemd), - SEQ(ws, name, elemr), - SEQ(wel,ws, robj, elemr), - ws)); - h_bind_indirect(elemd, elemd_); - h_bind_indirect(elemr, elemr_); + H_RULE(array_, h_middle(array_begin, MANY_WS(obj), array_end)); h_bind_indirect(array, array_); /* streams */ @@ -2639,7 +2628,7 @@ init_parser(struct Env *aux) p_ahexstream = ahexstream; p_ws = ws; p_wel = wel; - p_elemr = h_action(elemr, h_act_flatten, NULL); + p_objs = objs; p_npair = npair; p_bytes = bytes; p_textstream = txtstream; @@ -4746,7 +4735,7 @@ p_objstm__m(HAllocator *mm__, const Dict *dict) HParser *wel_ws = h_sequence__m(mm__, p_wel, p_ws, NULL); HParser *idx = p_sepBy_n__m(mm__, p_npair, wel_ws, N); - HParser *p_ostm = h_sequence__m(mm__, p_ws, idx, p_elemr, p_ws, NULL); + HParser *p_ostm = h_sequence__m(mm__, p_ws, idx, p_objs, p_ws, NULL); // XXX plain indirect references not allowed in object streams // ISO 32000-2:2020, 7.5.7 "Object streams": // > An object in an object stream shall not consist solely of -- GitLab