aboutsummaryrefslogtreecommitdiffstats
path: root/examples/pdf-bookmarks.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-02-10 14:47:15 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-02-11 15:27:39 +0100
commit5b0030ff5978a4958bec625d2f8a4db34f34ca1a (patch)
tree86e048141589809d01392a62abc324bf93fc49a6 /examples/pdf-bookmarks.cc
parent956a272d622af303859d7239c21272116c108b58 (diff)
downloadqpdf-5b0030ff5978a4958bec625d2f8a4db34f34ca1a.tar.zst
Tidy pdf-bookmarks example
Convert loops to use range-based for statements. Simplify the extract_bookmarks function.
Diffstat (limited to 'examples/pdf-bookmarks.cc')
-rw-r--r--examples/pdf-bookmarks.cc37
1 files changed, 17 insertions, 20 deletions
diff --git a/examples/pdf-bookmarks.cc b/examples/pdf-bookmarks.cc
index e343c541..1212b86d 100644
--- a/examples/pdf-bookmarks.cc
+++ b/examples/pdf-bookmarks.cc
@@ -5,11 +5,14 @@
#include <qpdf/QPDFPageDocumentHelper.hh>
#include <qpdf/QPDFOutlineDocumentHelper.hh>
#include <qpdf/QUtil.hh>
+#include <qpdf/QIntC.hh>
#include <qpdf/QTC.hh>
// This program demonstrates extraction of bookmarks using the qpdf
// outlines API. Note that all the information shown by this program
// can also be obtained from a PDF file using qpdf's --json option.
+//
+// Ignore calls to QTC::TC - they are for qpdf CI testing only.
static char const* whoami = 0;
static enum { st_none, st_numbers, st_lines } style = st_none;
@@ -51,13 +54,10 @@ void print_lines(std::vector<int>& numbers)
void generate_page_map(QPDF& qpdf)
{
QPDFPageDocumentHelper dh(qpdf);
- std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
int n = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end(); ++iter)
+ for (auto const& page : dh.getAllPages())
{
- QPDFObjectHandle oh = (*iter).getObjectHandle();
- page_map[oh.getObjGen()] = ++n;
+ page_map[page.getObjectHandle().getObjGen()] = ++n;
}
}
@@ -73,10 +73,9 @@ void show_bookmark_details(QPDFOutlineObjectHelper outline,
case st_numbers:
QTC::TC("examples", "pdf-bookmarks numbers");
- for (std::vector<int>::iterator iter = numbers.begin();
- iter != numbers.end(); ++iter)
+ for (auto const& number : numbers)
{
- std::cout << *iter << ".";
+ std::cout << number << ".";
}
std::cout << " ";
break;
@@ -138,20 +137,18 @@ void show_bookmark_details(QPDFOutlineObjectHelper outline,
void extract_bookmarks(std::vector<QPDFOutlineObjectHelper> outlines,
std::vector<int>& numbers)
{
- numbers.push_back(0);
- for (std::vector<QPDFOutlineObjectHelper>::iterator iter = outlines.begin();
- iter != outlines.end(); ++iter)
+ // For style == st_numbers, numbers.at(n) contains the numerical
+ // label for the outline, so we count up from 1.
+ // For style == st_lines, numbers.at(n) == 0 indicates the last
+ // outline at level n, and we don't otherwise care what the value
+ // is, so we count up to zero.
+ numbers.push_back(
+ (style == st_lines) ? -QIntC::to_int(outlines.size()) : 0);
+ for (auto& outline : outlines)
{
++(numbers.back());
- show_bookmark_details(*iter, numbers);
- std::vector<QPDFOutlineObjectHelper>::iterator next = iter;
- ++next;
- bool has_next = (next != outlines.end());
- if ((style == st_lines) && (! has_next))
- {
- numbers.back() = 0;
- }
- extract_bookmarks((*iter).getKids(), numbers);
+ show_bookmark_details(outline, numbers);
+ extract_bookmarks(outline.getKids(), numbers);
}
numbers.pop_back();
}