Commit 5901fcad4c33b6058569e93ec9eeaa12cc880469
Committed by
Jay Berkenbilt
1 parent
83710603
C-API expose QPDFObjectHandle::getKeyIfDict
Showing
4 changed files
with
23 additions
and
0 deletions
include/qpdf/qpdf-c.h
| @@ -812,6 +812,8 @@ extern "C" { | @@ -812,6 +812,8 @@ extern "C" { | ||
| 812 | QPDF_BOOL qpdf_oh_has_key(qpdf_data qpdf, qpdf_oh oh, char const* key); | 812 | QPDF_BOOL qpdf_oh_has_key(qpdf_data qpdf, qpdf_oh oh, char const* key); |
| 813 | QPDF_DLL | 813 | QPDF_DLL |
| 814 | qpdf_oh qpdf_oh_get_key(qpdf_data qpdf, qpdf_oh oh, char const* key); | 814 | qpdf_oh qpdf_oh_get_key(qpdf_data qpdf, qpdf_oh oh, char const* key); |
| 815 | + QPDF_DLL | ||
| 816 | + qpdf_oh qpdf_oh_get_key_if_dict(qpdf_data qpdf, qpdf_oh oh, char const* key); | ||
| 815 | 817 | ||
| 816 | QPDF_DLL | 818 | QPDF_DLL |
| 817 | QPDF_BOOL qpdf_oh_is_or_has_name( | 819 | QPDF_BOOL qpdf_oh_is_or_has_name( |
libqpdf/qpdf-c.cc
| @@ -1550,6 +1550,15 @@ qpdf_oh qpdf_oh_get_key(qpdf_data qpdf, qpdf_oh oh, char const* key) | @@ -1550,6 +1550,15 @@ qpdf_oh qpdf_oh_get_key(qpdf_data qpdf, qpdf_oh oh, char const* key) | ||
| 1550 | }); | 1550 | }); |
| 1551 | } | 1551 | } |
| 1552 | 1552 | ||
| 1553 | +qpdf_oh qpdf_oh_get_key_if_dict(qpdf_data qpdf, qpdf_oh oh, char const* key) | ||
| 1554 | +{ | ||
| 1555 | + return do_with_oh<qpdf_oh>( | ||
| 1556 | + qpdf, oh, return_null(qpdf), [qpdf, key](QPDFObjectHandle& o) { | ||
| 1557 | + QTC::TC("qpdf", "qpdf-c called qpdf_oh_get_key_if_dict"); | ||
| 1558 | + return new_object(qpdf, o.getKeyIfDict(key)); | ||
| 1559 | + }); | ||
| 1560 | +} | ||
| 1561 | + | ||
| 1553 | QPDF_BOOL qpdf_oh_is_or_has_name(qpdf_data qpdf, qpdf_oh oh, char const* key) | 1562 | QPDF_BOOL qpdf_oh_is_or_has_name(qpdf_data qpdf, qpdf_oh oh, char const* key) |
| 1554 | { | 1563 | { |
| 1555 | return do_with_oh<QPDF_BOOL>( | 1564 | return do_with_oh<QPDF_BOOL>( |
qpdf/qpdf-ctest.c
| @@ -592,6 +592,17 @@ static void test24(char const* infile, | @@ -592,6 +592,17 @@ static void test24(char const* infile, | ||
| 592 | "/Encoding"); | 592 | "/Encoding"); |
| 593 | assert(strcmp(qpdf_oh_get_name(qpdf, encoding), "/WinAnsiEncoding") == 0); | 593 | assert(strcmp(qpdf_oh_get_name(qpdf, encoding), "/WinAnsiEncoding") == 0); |
| 594 | 594 | ||
| 595 | + qpdf_oh res = qpdf_oh_get_key_if_dict(qpdf, page1, "/Resources"); | ||
| 596 | + assert(qpdf_oh_has_key(qpdf, res, "/Font")); | ||
| 597 | + /* check no warning when called with null */ | ||
| 598 | + while (qpdf_more_warnings(qpdf)) | ||
| 599 | + { | ||
| 600 | + qpdf_next_warning(qpdf); | ||
| 601 | + } | ||
| 602 | + res = qpdf_oh_get_key_if_dict( | ||
| 603 | + qpdf, qpdf_oh_get_key_if_dict(qpdf, page1, "/Missing"), "/Font"); | ||
| 604 | + assert(! qpdf_more_warnings(qpdf)); | ||
| 605 | + | ||
| 595 | /* Look at page contents to exercise stream functions */ | 606 | /* Look at page contents to exercise stream functions */ |
| 596 | qpdf_oh contents = qpdf_oh_get_key(qpdf, page1, "/Contents"); | 607 | qpdf_oh contents = qpdf_oh_get_key(qpdf, page1, "/Contents"); |
| 597 | assert(qpdf_oh_is_stream(qpdf, contents)); | 608 | assert(qpdf_oh_is_stream(qpdf, contents)); |
qpdf/qpdf.testcov
| @@ -504,6 +504,7 @@ qpdf-c called qpdf_oh_dict_more_keys 0 | @@ -504,6 +504,7 @@ qpdf-c called qpdf_oh_dict_more_keys 0 | ||
| 504 | qpdf-c called qpdf_oh_dict_next_key 0 | 504 | qpdf-c called qpdf_oh_dict_next_key 0 |
| 505 | qpdf-c called qpdf_oh_has_key 0 | 505 | qpdf-c called qpdf_oh_has_key 0 |
| 506 | qpdf-c called qpdf_oh_get_key 0 | 506 | qpdf-c called qpdf_oh_get_key 0 |
| 507 | +qpdf-c called qpdf_oh_get_key_if_dict 0 | ||
| 507 | qpdf-c called qpdf_oh_is_or_has_name 0 | 508 | qpdf-c called qpdf_oh_is_or_has_name 0 |
| 508 | qpdf-c called qpdf_oh_new_null 0 | 509 | qpdf-c called qpdf_oh_new_null 0 |
| 509 | qpdf-c called qpdf_oh_new_bool 0 | 510 | qpdf-c called qpdf_oh_new_bool 0 |