From 7cb77b59f70ba62c2543e7004101dedecb1c4c94 Mon Sep 17 00:00:00 2001 From: Pompolic <pompolic@special-circumstanc.es> Date: Tue, 4 Feb 2020 20:00:13 +0100 Subject: [PATCH] pretty printer functions --- pdf.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/pdf.c b/pdf.c index ad36654..f4183d0 100644 --- a/pdf.c +++ b/pdf.c @@ -116,7 +116,7 @@ struct Env { /* * custom token types */ -HTokenType TT_XREntry, TT_Ref, TT_Dict; +HTokenType TT_XREntry, TT_Ref, TT_Dict, TT_DictEntry; typedef struct { enum {XR_FREE, XR_INUSE, XR_OBJSTM} type; @@ -131,9 +131,14 @@ typedef struct { typedef struct { size_t nr, gen; } Ref; typedef struct { - const HParsedToken *obj; + HCountedArray *seq; } Dict; +typedef struct { + HParsedToken *name; + HParsedToken *obj; +} DictEntry; + void pp_xrentry(FILE *stream, const HParsedToken *tok, int indent, int delta) { @@ -165,6 +170,36 @@ pp_ref(FILE *stream, const HParsedToken *tok, int indent, int delta) fprintf(stream, "[%zu,%zu]", r->nr, r->gen); } +/* TODO XXX call pretty printer on each seq element */ +void +pp_dict(FILE *stream, const HParsedToken *tok, int indent, int delta) +{ + assert(tok->seq); + + if (tok->seq->used == 0) + fprintf(stream, "{ }"); + else { + fprintf(stream, "{%*s", delta - 1, ""); + /*for (size_t i = 0; i < tok->seq->used; i++) { + if (i > 0) fprintf(stream, "\n%*s,%*s", indent, "", delta - 1, ""); + h_pprint(stream, tok->seq->elements[i], indent + delta, delta); */ + } + if (tok->seq->used > 2) + fprintf(stream, "\n%*s}", indent, ""); + else + fprintf(stream, " }"); + } +} + +void +pp_dictentry(FILE *stream, const HParsedToken *tok, int indent, int delta) +{ + DictEntry *de = H_CAST(DictEntry, tok); + + h_pprint(stream, de->name, indent, delta); + fprintf(stream, "\":\"", indent, delta); + h_pprint(stream, de->obj, indent, delta); +} /* * semantic actions -- GitLab