aboutsummaryrefslogtreecommitdiffstats
path: root/examples/pdf-bookmarks.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-04-02 23:14:10 +0200
committerJay Berkenbilt <ejb@ql.org>2022-04-04 14:10:40 +0200
commit12f1eb15ca3fed6310402847559a7c99d3c77847 (patch)
tree8935675b623c6f3b4914b8b44f7fa5f2816a9241 /examples/pdf-bookmarks.cc
parentf20fa61eb4c323eb1642c69c236b3d9a1f8b2cdb (diff)
downloadqpdf-12f1eb15ca3fed6310402847559a7c99d3c77847.tar.zst
Programmatically apply new formatting to code
Run this: for i in **/*.cc **/*.c **/*.h **/*.hh; do clang-format < $i >| $i.new && mv $i.new $i done
Diffstat (limited to 'examples/pdf-bookmarks.cc')
-rw-r--r--examples/pdf-bookmarks.cc166
1 files changed, 64 insertions, 102 deletions
diff --git a/examples/pdf-bookmarks.cc b/examples/pdf-bookmarks.cc
index e049e423..de0af8e6 100644
--- a/examples/pdf-bookmarks.cc
+++ b/examples/pdf-bookmarks.cc
@@ -1,12 +1,12 @@
-#include <iostream>
-#include <string.h>
-#include <stdlib.h>
+#include <qpdf/QIntC.hh>
#include <qpdf/QPDF.hh>
-#include <qpdf/QPDFPageDocumentHelper.hh>
#include <qpdf/QPDFOutlineDocumentHelper.hh>
-#include <qpdf/QUtil.hh>
-#include <qpdf/QIntC.hh>
+#include <qpdf/QPDFPageDocumentHelper.hh>
#include <qpdf/QTC.hh>
+#include <qpdf/QUtil.hh>
+#include <iostream>
+#include <stdlib.h>
+#include <string.h>
// This program demonstrates extraction of bookmarks using the qpdf
// outlines API. Note that all the information shown by this program
@@ -20,67 +20,62 @@ static bool show_open = false;
static bool show_targets = false;
static std::map<QPDFObjGen, int> page_map;
-void usage()
+void
+usage()
{
- std::cerr << "Usage: " << whoami << " [options] file.pdf [password]"
- << std::endl
- << "Options:" << std::endl
- << " --numbers give bookmarks outline-style numbers"
- << std::endl
- << " --lines draw lines to show bookmark hierarchy"
- << std::endl
- << " --show-open indicate whether a bookmark is initially open"
- << std::endl
- << " --show-targets show target if possible"
- << std::endl;
+ std::cerr
+ << "Usage: " << whoami << " [options] file.pdf [password]" << std::endl
+ << "Options:" << std::endl
+ << " --numbers give bookmarks outline-style numbers"
+ << std::endl
+ << " --lines draw lines to show bookmark hierarchy"
+ << std::endl
+ << " --show-open indicate whether a bookmark is initially open"
+ << std::endl
+ << " --show-targets show target if possible" << std::endl;
exit(2);
}
-void print_lines(std::vector<int>& numbers)
+void
+print_lines(std::vector<int>& numbers)
{
- for (unsigned int i = 0; i < numbers.size() - 1; ++i)
- {
- if (numbers.at(i))
- {
+ for (unsigned int i = 0; i < numbers.size() - 1; ++i) {
+ if (numbers.at(i)) {
std::cout << "| ";
- }
- else
- {
+ } else {
std::cout << " ";
}
}
}
-void generate_page_map(QPDF& qpdf)
+void
+generate_page_map(QPDF& qpdf)
{
QPDFPageDocumentHelper dh(qpdf);
int n = 0;
- for (auto const& page : dh.getAllPages())
- {
+ for (auto const& page : dh.getAllPages()) {
page_map[page.getObjectHandle().getObjGen()] = ++n;
}
}
-void show_bookmark_details(QPDFOutlineObjectHelper outline,
- std::vector<int> numbers)
+void
+show_bookmark_details(QPDFOutlineObjectHelper outline, std::vector<int> numbers)
{
// No default so gcc will warn on missing tag
- switch (style)
- {
- case st_none:
+ switch (style) {
+ case st_none:
QTC::TC("examples", "pdf-bookmarks none");
break;
- case st_numbers:
+ case st_numbers:
QTC::TC("examples", "pdf-bookmarks numbers");
- for (auto const& number : numbers)
- {
+ for (auto const& number : numbers) {
std::cout << number << ".";
}
std::cout << " ";
break;
- case st_lines:
+ case st_lines:
QTC::TC("examples", "pdf-bookmarks lines");
print_lines(numbers);
std::cout << "|" << std::endl;
@@ -89,42 +84,32 @@ void show_bookmark_details(QPDFOutlineObjectHelper outline,
break;
}
- if (show_open)
- {
+ if (show_open) {
int count = outline.getCount();
- if (count)
- {
+ if (count) {
QTC::TC("examples", "pdf-bookmarks has count");
- if (count > 0)
- {
+ if (count > 0) {
// hierarchy is open at this point
QTC::TC("examples", "pdf-bookmarks open");
std::cout << "(v) ";
- }
- else
- {
+ } else {
QTC::TC("examples", "pdf-bookmarks closed");
std::cout << "(>) ";
}
- }
- else
- {
+ } else {
QTC::TC("examples", "pdf-bookmarks no count");
std::cout << "( ) ";
}
}
- if (show_targets)
- {
+ if (show_targets) {
QTC::TC("examples", "pdf-bookmarks targets");
std::string target = "unknown";
QPDFObjectHandle dest_page = outline.getDestPage();
- if (! dest_page.isNull())
- {
+ if (!dest_page.isNull()) {
QTC::TC("examples", "pdf-bookmarks dest");
QPDFObjGen og = dest_page.getObjGen();
- if (page_map.count(og))
- {
+ if (page_map.count(og)) {
target = QUtil::int_to_string(page_map[og]);
}
}
@@ -134,8 +119,9 @@ void show_bookmark_details(QPDFOutlineObjectHelper outline,
std::cout << outline.getTitle() << std::endl;
}
-void extract_bookmarks(std::vector<QPDFOutlineObjectHelper> outlines,
- std::vector<int>& numbers)
+void
+extract_bookmarks(
+ std::vector<QPDFOutlineObjectHelper> outlines, std::vector<int>& numbers)
{
// For style == st_numbers, numbers.at(n) contains the numerical
// label for the outline, so we count up from 1.
@@ -144,8 +130,7 @@ void extract_bookmarks(std::vector<QPDFOutlineObjectHelper> outlines,
// is, so we count up to zero.
numbers.push_back(
(style == st_lines) ? -QIntC::to_int(outlines.size()) : 0);
- for (auto& outline : outlines)
- {
+ for (auto& outline : outlines) {
++(numbers.back());
show_bookmark_details(outline, numbers);
extract_bookmarks(outline.getKids(), numbers);
@@ -153,87 +138,64 @@ void extract_bookmarks(std::vector<QPDFOutlineObjectHelper> outlines,
numbers.pop_back();
}
-int main(int argc, char* argv[])
+int
+main(int argc, char* argv[])
{
whoami = QUtil::getWhoami(argv[0]);
- if ((argc == 2) && (strcmp(argv[1], "--version") == 0))
- {
+ if ((argc == 2) && (strcmp(argv[1], "--version") == 0)) {
std::cout << whoami << " version 1.5" << std::endl;
exit(0);
}
int arg;
- for (arg = 1; arg < argc; ++arg)
- {
- if (argv[arg][0] == '-')
- {
- if (strcmp(argv[arg], "--numbers") == 0)
- {
+ for (arg = 1; arg < argc; ++arg) {
+ if (argv[arg][0] == '-') {
+ if (strcmp(argv[arg], "--numbers") == 0) {
style = st_numbers;
- }
- else if (strcmp(argv[arg], "--lines") == 0)
- {
+ } else if (strcmp(argv[arg], "--lines") == 0) {
style = st_lines;
- }
- else if (strcmp(argv[arg], "--show-open") == 0)
- {
+ } else if (strcmp(argv[arg], "--show-open") == 0) {
show_open = true;
- }
- else if (strcmp(argv[arg], "--show-targets") == 0)
- {
+ } else if (strcmp(argv[arg], "--show-targets") == 0) {
show_targets = true;
- }
- else
- {
+ } else {
usage();
}
- }
- else
- {
+ } else {
break;
}
}
- if (arg >= argc)
- {
+ if (arg >= argc) {
usage();
}
char const* filename = argv[arg++];
char const* password = "";
- if (arg < argc)
- {
+ if (arg < argc) {
password = argv[arg++];
}
- if (arg != argc)
- {
+ if (arg != argc) {
usage();
}
- try
- {
+ try {
QPDF qpdf;
qpdf.processFile(filename, password);
QPDFOutlineDocumentHelper odh(qpdf);
- if (odh.hasOutlines())
- {
+ if (odh.hasOutlines()) {
std::vector<int> numbers;
- if (show_targets)
- {
+ if (show_targets) {
generate_page_map(qpdf);
}
extract_bookmarks(odh.getTopLevelOutlines(), numbers);
- }
- else
- {
+ } else {
std::cout << filename << " has no bookmarks" << std::endl;
}
- }
- catch (std::exception &e)
- {
+ } catch (std::exception& e) {
std::cerr << whoami << " processing file " << filename << ": "
<< e.what() << std::endl;
exit(2);