Commit 3b60224bae16f36e0b6caf13fe1e119b9fa1f6b1

Authored by Jay Berkenbilt
1 parent b74e7989

JSONHandler: pass JSON object to array start function

libqpdf/JSONHandler.cc
@@ -69,7 +69,7 @@ JSONHandler::addFallbackDictHandler(std::shared_ptr<JSONHandler> fdh) @@ -69,7 +69,7 @@ JSONHandler::addFallbackDictHandler(std::shared_ptr<JSONHandler> fdh)
69 } 69 }
70 70
71 void 71 void
72 -JSONHandler::addArrayHandlers(void_handler_t start_fn, 72 +JSONHandler::addArrayHandlers(json_handler_t start_fn,
73 void_handler_t end_fn, 73 void_handler_t end_fn,
74 std::shared_ptr<JSONHandler> ah) 74 std::shared_ptr<JSONHandler> ah)
75 { 75 {
@@ -144,7 +144,7 @@ JSONHandler::handle(std::string const&amp; path, JSON j) @@ -144,7 +144,7 @@ JSONHandler::handle(std::string const&amp; path, JSON j)
144 } 144 }
145 if (this->m->h.array_start_handler && j.isArray()) 145 if (this->m->h.array_start_handler && j.isArray())
146 { 146 {
147 - this->m->h.array_start_handler(path); 147 + this->m->h.array_start_handler(path, j);
148 size_t i = 0; 148 size_t i = 0;
149 j.forEachArrayItem([&i, &path, this](JSON v) { 149 j.forEachArrayItem([&i, &path, this](JSON v) {
150 this->m->h.array_item_handler->handle( 150 this->m->h.array_item_handler->handle(
libqpdf/qpdf/JSONHandler.hh
@@ -66,7 +66,7 @@ class JSONHandler @@ -66,7 +66,7 @@ class JSONHandler
66 void addFallbackDictHandler(std::shared_ptr<JSONHandler>); 66 void addFallbackDictHandler(std::shared_ptr<JSONHandler>);
67 67
68 QPDF_DLL 68 QPDF_DLL
69 - void addArrayHandlers(void_handler_t start_fn, 69 + void addArrayHandlers(json_handler_t start_fn,
70 void_handler_t end_fn, 70 void_handler_t end_fn,
71 std::shared_ptr<JSONHandler> item_handlers); 71 std::shared_ptr<JSONHandler> item_handlers);
72 72
@@ -102,7 +102,7 @@ class JSONHandler @@ -102,7 +102,7 @@ class JSONHandler
102 bool_handler_t bool_handler; 102 bool_handler_t bool_handler;
103 json_handler_t dict_start_handler; 103 json_handler_t dict_start_handler;
104 void_handler_t dict_end_handler; 104 void_handler_t dict_end_handler;
105 - void_handler_t array_start_handler; 105 + json_handler_t array_start_handler;
106 void_handler_t array_end_handler; 106 void_handler_t array_end_handler;
107 void_handler_t final_handler; 107 void_handler_t final_handler;
108 std::map<std::string, std::shared_ptr<JSONHandler>> dict_handlers; 108 std::map<std::string, std::shared_ptr<JSONHandler>> dict_handlers;
libtests/json_handler.cc
@@ -71,8 +71,7 @@ static std::shared_ptr&lt;JSONHandler&gt; make_all_handler() @@ -71,8 +71,7 @@ static std::shared_ptr&lt;JSONHandler&gt; make_all_handler()
71 auto h5s = std::make_shared<JSONHandler>(); 71 auto h5s = std::make_shared<JSONHandler>();
72 h->addDictKeyHandler("five", h5s); 72 h->addDictKeyHandler("five", h5s);
73 h5s->addArrayHandlers( 73 h5s->addArrayHandlers(
74 - make_print_message("array begin"),  
75 - make_print_message("array end"), 74 + print_json, make_print_message("array end"),
76 h5); 75 h5);
77 auto h6 = std::make_shared<JSONHandler>(); 76 auto h6 = std::make_shared<JSONHandler>();
78 h6->addDictHandlers( 77 h6->addDictHandlers(
libtests/qtest/json_handler/json_handler.out
@@ -25,7 +25,13 @@ @@ -25,7 +25,13 @@
25 "three": true, 25 "three": true,
26 "two": 3.14 26 "two": 3.14
27 } 27 }
28 -.five: json: array begin 28 +.five: json: [
  29 + "x",
  30 + false,
  31 + "y",
  32 + null,
  33 + true
  34 +]
29 .five[0]: string: x 35 .five[0]: string: x
30 .five[1]: bool: false 36 .five[1]: bool: false
31 .five[2]: string: y 37 .five[2]: string: y