aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-30 19:45:02 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-31 21:57:45 +0100
commit3b60224bae16f36e0b6caf13fe1e119b9fa1f6b1 (patch)
treeafdaac0f93751a9ec3d689ab08f18a34ca6f4679
parentb74e7989c34e041e7a6461e00ae045045273ca51 (diff)
downloadqpdf-3b60224bae16f36e0b6caf13fe1e119b9fa1f6b1.tar.zst
JSONHandler: pass JSON object to array start function
-rw-r--r--libqpdf/JSONHandler.cc4
-rw-r--r--libqpdf/qpdf/JSONHandler.hh4
-rw-r--r--libtests/json_handler.cc3
-rw-r--r--libtests/qtest/json_handler/json_handler.out8
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<JSONHandler> fdh)
}
void
-JSONHandler::addArrayHandlers(void_handler_t start_fn,
+JSONHandler::addArrayHandlers(json_handler_t start_fn,
void_handler_t end_fn,
std::shared_ptr<JSONHandler> 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<JSONHandler>);
QPDF_DLL
- void addArrayHandlers(void_handler_t start_fn,
+ void addArrayHandlers(json_handler_t start_fn,
void_handler_t end_fn,
std::shared_ptr<JSONHandler> 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<std::string, std::shared_ptr<JSONHandler>> 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<JSONHandler> make_all_handler()
auto h5s = std::make_shared<JSONHandler>();
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<JSONHandler>();
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