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