From 3b60224bae16f36e0b6caf13fe1e119b9fa1f6b1 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 30 Jan 2022 13:45:02 -0500 Subject: JSONHandler: pass JSON object to array start function --- libqpdf/JSONHandler.cc | 4 ++-- libqpdf/qpdf/JSONHandler.hh | 4 ++-- libtests/json_handler.cc | 3 +-- libtests/qtest/json_handler/json_handler.out | 8 +++++++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libqpdf/JSONHandler.cc b/libqpdf/JSONHandler.cc index 121ae8a2..7e69d764 100644 --- a/libqpdf/JSONHandler.cc +++ b/libqpdf/JSONHandler.cc @@ -69,7 +69,7 @@ JSONHandler::addFallbackDictHandler(std::shared_ptr fdh) } void -JSONHandler::addArrayHandlers(void_handler_t start_fn, +JSONHandler::addArrayHandlers(json_handler_t start_fn, void_handler_t end_fn, std::shared_ptr ah) { @@ -144,7 +144,7 @@ JSONHandler::handle(std::string const& path, JSON j) } if (this->m->h.array_start_handler && j.isArray()) { - this->m->h.array_start_handler(path); + this->m->h.array_start_handler(path, j); size_t i = 0; j.forEachArrayItem([&i, &path, this](JSON v) { this->m->h.array_item_handler->handle( diff --git a/libqpdf/qpdf/JSONHandler.hh b/libqpdf/qpdf/JSONHandler.hh index 2db951b5..d7f08ead 100644 --- a/libqpdf/qpdf/JSONHandler.hh +++ b/libqpdf/qpdf/JSONHandler.hh @@ -66,7 +66,7 @@ class JSONHandler void addFallbackDictHandler(std::shared_ptr); QPDF_DLL - void addArrayHandlers(void_handler_t start_fn, + void addArrayHandlers(json_handler_t start_fn, void_handler_t end_fn, std::shared_ptr item_handlers); @@ -102,7 +102,7 @@ class JSONHandler bool_handler_t bool_handler; json_handler_t dict_start_handler; void_handler_t dict_end_handler; - void_handler_t array_start_handler; + json_handler_t array_start_handler; void_handler_t array_end_handler; void_handler_t final_handler; std::map> dict_handlers; diff --git a/libtests/json_handler.cc b/libtests/json_handler.cc index dcc8e66e..568677a8 100644 --- a/libtests/json_handler.cc +++ b/libtests/json_handler.cc @@ -71,8 +71,7 @@ static std::shared_ptr make_all_handler() auto h5s = std::make_shared(); h->addDictKeyHandler("five", h5s); h5s->addArrayHandlers( - make_print_message("array begin"), - make_print_message("array end"), + print_json, make_print_message("array end"), h5); auto h6 = std::make_shared(); h6->addDictHandlers( diff --git a/libtests/qtest/json_handler/json_handler.out b/libtests/qtest/json_handler/json_handler.out index d9d99660..f076d4ee 100644 --- a/libtests/qtest/json_handler/json_handler.out +++ b/libtests/qtest/json_handler/json_handler.out @@ -25,7 +25,13 @@ "three": true, "two": 3.14 } -.five: json: array begin +.five: json: [ + "x", + false, + "y", + null, + true +] .five[0]: string: x .five[1]: bool: false .five[2]: string: y -- cgit v1.2.3-54-g00ecf