aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf/test_driver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'qpdf/test_driver.cc')
-rw-r--r--qpdf/test_driver.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index 48017908..cd6aa991 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -58,6 +58,45 @@ class Provider: public QPDFObjectHandle::StreamDataProvider
bool bad_length;
};
+class ParserCallbacks: public QPDFObjectHandle::ParserCallbacks
+{
+ public:
+ virtual ~ParserCallbacks()
+ {
+ }
+
+ virtual void handleObject(QPDFObjectHandle);
+ virtual void handleEOF();
+};
+
+void
+ParserCallbacks::handleObject(QPDFObjectHandle obj)
+{
+ if (obj.isInlineImage())
+ {
+ std::string val = obj.getInlineImageValue();
+ std::cout << "inline image: ";
+ char buf[3];
+ buf[2] = '\0';
+ for (size_t i = 0; i < val.length(); ++i)
+ {
+ sprintf(buf, "%02x", (unsigned char)(val[i]));
+ std::cout << buf;
+ }
+ std::cout << std::endl;
+ }
+ else
+ {
+ std::cout << obj.unparse() << std::endl;
+ }
+}
+
+void
+ParserCallbacks::handleEOF()
+{
+ std::cout << "-EOF-" << std::endl;
+}
+
static std::string getPageContents(QPDFObjectHandle page)
{
PointerHolder<Buffer> b1 =
@@ -1245,6 +1284,19 @@ void runtest(int n, char const* filename1, char const* arg2)
}
}
}
+ else if (n == 37)
+ {
+ // Parse content streams of all pages
+ std::vector<QPDFObjectHandle> pages = pdf.getAllPages();
+ for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin();
+ iter != pages.end(); ++iter)
+ {
+ QPDFObjectHandle page = *iter;
+ QPDFObjectHandle contents = page.getKey("/Contents");
+ ParserCallbacks cb;
+ QPDFObjectHandle::parseContentStream(contents, &cb);
+ }
+ }
else
{
throw std::runtime_error(std::string("invalid test ") +