summaryrefslogtreecommitdiffstats
path: root/qpdf/test_renumber.cc
diff options
context:
space:
mode:
Diffstat (limited to 'qpdf/test_renumber.cc')
-rw-r--r--qpdf/test_renumber.cc305
1 files changed, 108 insertions, 197 deletions
diff --git a/qpdf/test_renumber.cc b/qpdf/test_renumber.cc
index 68acf60c..9892340a 100644
--- a/qpdf/test_renumber.cc
+++ b/qpdf/test_renumber.cc
@@ -1,157 +1,119 @@
#include <qpdf/Buffer.hh>
#include <qpdf/PointerHolder.hh>
#include <qpdf/QPDF.hh>
+#include <qpdf/QPDFObjGen.hh>
#include <qpdf/QPDFObject.hh>
#include <qpdf/QPDFObjectHandle.hh>
-#include <qpdf/QPDFObjGen.hh>
#include <qpdf/QPDFWriter.hh>
#include <qpdf/QPDFXRefEntry.hh>
#include <algorithm>
+#include <cstdlib>
#include <iostream>
#include <set>
#include <string>
#include <vector>
-#include <cstdlib>
-void usage()
+void
+usage()
{
- std::cerr
- << "Usage: test_renumber [OPTION] INPUT.pdf"
- << std::endl
- << "Option:"
- << std::endl
- << " --object-streams=preserve|disable|generate"
- << std::endl
- << " --linearize"
- << std::endl
- << " --preserve-unreferenced"
- << std::endl;
+ std::cerr << "Usage: test_renumber [OPTION] INPUT.pdf" << std::endl
+ << "Option:" << std::endl
+ << " --object-streams=preserve|disable|generate" << std::endl
+ << " --linearize" << std::endl
+ << " --preserve-unreferenced" << std::endl;
}
-bool compare(QPDFObjectHandle a, QPDFObjectHandle b)
+bool
+compare(QPDFObjectHandle a, QPDFObjectHandle b)
{
static std::set<QPDFObjGen> visited;
- if (a.isIndirect())
- {
- if (visited.count(a.getObjGen()))
- {
+ if (a.isIndirect()) {
+ if (visited.count(a.getObjGen())) {
return true;
}
visited.insert(a.getObjGen());
}
- if (a.getTypeCode() != b.getTypeCode())
- {
- std::cerr
- << "different type code"
- << std::endl;
+ if (a.getTypeCode() != b.getTypeCode()) {
+ std::cerr << "different type code" << std::endl;
return false;
}
- switch (a.getTypeCode())
- {
- case QPDFObject::ot_boolean:
- if (a.getBoolValue() != b.getBoolValue())
- {
- std::cerr
- << "different boolean"
- << std::endl;
+ switch (a.getTypeCode()) {
+ case QPDFObject::ot_boolean:
+ if (a.getBoolValue() != b.getBoolValue()) {
+ std::cerr << "different boolean" << std::endl;
return false;
}
break;
- case QPDFObject::ot_integer:
- if (a.getIntValue() != b.getIntValue())
- {
- std::cerr
- << "different integer"
- << std::endl;
+ case QPDFObject::ot_integer:
+ if (a.getIntValue() != b.getIntValue()) {
+ std::cerr << "different integer" << std::endl;
return false;
}
break;
- case QPDFObject::ot_real:
- if (a.getRealValue() != b.getRealValue())
- {
- std::cerr
- << "different real"
- << std::endl;
+ case QPDFObject::ot_real:
+ if (a.getRealValue() != b.getRealValue()) {
+ std::cerr << "different real" << std::endl;
return false;
}
break;
- case QPDFObject::ot_string:
- if (a.getStringValue() != b.getStringValue())
- {
- std::cerr
- << "different string"
- << std::endl;
+ case QPDFObject::ot_string:
+ if (a.getStringValue() != b.getStringValue()) {
+ std::cerr << "different string" << std::endl;
return false;
}
break;
- case QPDFObject::ot_name:
- if (a.getName() != b.getName())
- {
- std::cerr
- << "different name"
- << std::endl;
+ case QPDFObject::ot_name:
+ if (a.getName() != b.getName()) {
+ std::cerr << "different name" << std::endl;
return false;
}
break;
- case QPDFObject::ot_array:
+ case QPDFObject::ot_array:
{
std::vector<QPDFObjectHandle> objs_a = a.getArrayAsVector();
std::vector<QPDFObjectHandle> objs_b = b.getArrayAsVector();
size_t items = objs_a.size();
- if (items != objs_b.size())
- {
- std::cerr
- << "different array size"
- << std::endl;
+ if (items != objs_b.size()) {
+ std::cerr << "different array size" << std::endl;
return false;
}
- for (size_t i = 0; i < items; ++i)
- {
- if (!compare(objs_a[i], objs_b[i]))
- {
- std::cerr
- << "different array item"
- << std::endl;
+ for (size_t i = 0; i < items; ++i) {
+ if (!compare(objs_a[i], objs_b[i])) {
+ std::cerr << "different array item" << std::endl;
return false;
}
}
}
break;
- case QPDFObject::ot_dictionary:
+ case QPDFObject::ot_dictionary:
{
std::set<std::string> keys_a = a.getKeys();
std::set<std::string> keys_b = b.getKeys();
- if (keys_a != keys_b)
- {
- std::cerr
- << "different dictionary keys"
- << std::endl;
+ if (keys_a != keys_b) {
+ std::cerr << "different dictionary keys" << std::endl;
return false;
}
- for(std::set<std::string>::iterator iter = keys_a.begin();
- iter != keys_a.end(); ++iter)
- {
- if (!compare(a.getKey(*iter), b.getKey(*iter)))
- {
- std::cerr
- << "different dictionary item"
- << std::endl;
+ for (std::set<std::string>::iterator iter = keys_a.begin();
+ iter != keys_a.end();
+ ++iter) {
+ if (!compare(a.getKey(*iter), b.getKey(*iter))) {
+ std::cerr << "different dictionary item" << std::endl;
return false;
}
}
}
break;
- case QPDFObject::ot_null:
+ case QPDFObject::ot_null:
break;
- case QPDFObject::ot_stream:
+ case QPDFObject::ot_stream:
std::cout << "stream objects are not compared" << std::endl;
break;
- default:
+ default:
std::cerr << "unknown object type" << std::endl;
std::exit(2);
}
@@ -159,70 +121,52 @@ bool compare(QPDFObjectHandle a, QPDFObjectHandle b)
return true;
}
-bool compare_xref_table(std::map<QPDFObjGen, QPDFXRefEntry> a,
- std::map<QPDFObjGen, QPDFXRefEntry> b)
+bool
+compare_xref_table(
+ std::map<QPDFObjGen, QPDFXRefEntry> a,
+ std::map<QPDFObjGen, QPDFXRefEntry> b)
{
- if (a.size() != b.size())
- {
- std::cerr
- << "different size"
- << std::endl;
+ if (a.size() != b.size()) {
+ std::cerr << "different size" << std::endl;
return false;
}
for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = a.begin();
- iter != a.end(); ++iter)
- {
- std::cout
- << "xref entry for "
- << iter->first.getObj() << "/" << iter->first.getGen()
- << std::endl;
+ iter != a.end();
+ ++iter) {
+ std::cout << "xref entry for " << iter->first.getObj() << "/"
+ << iter->first.getGen() << std::endl;
- if (b.count(iter->first) == 0)
- {
- std::cerr
- << "not found"
- << std::endl;
+ if (b.count(iter->first) == 0) {
+ std::cerr << "not found" << std::endl;
return false;
}
QPDFXRefEntry xref_a = iter->second;
QPDFXRefEntry xref_b = b[iter->first];
- if (xref_a.getType() != xref_b.getType())
- {
- std::cerr
- << "different xref entry type"
- << std::endl;
+ if (xref_a.getType() != xref_b.getType()) {
+ std::cerr << "different xref entry type" << std::endl;
return false;
}
- switch (xref_a.getType())
- {
- case 0:
+ switch (xref_a.getType()) {
+ case 0:
break;
- case 1:
- if (xref_a.getOffset() != xref_a.getOffset())
- {
- std::cerr
- << "different offset"
- << std::endl;
+ case 1:
+ if (xref_a.getOffset() != xref_a.getOffset()) {
+ std::cerr << "different offset" << std::endl;
return false;
}
break;
- case 2:
+ case 2:
if (xref_a.getObjStreamNumber() != xref_a.getObjStreamNumber() ||
- xref_a.getObjStreamIndex() != xref_a.getObjStreamIndex())
- {
- std::cerr
- << "different stream number or index"
- << std::endl;
+ xref_a.getObjStreamIndex() != xref_a.getObjStreamIndex()) {
+ std::cerr << "different stream number or index" << std::endl;
return false;
}
break;
- default:
- std::cerr
- << "unknown xref entry type"
- << std::endl;
+ default:
+ std::cerr << "unknown xref entry type" << std::endl;
std::exit(2);
}
}
@@ -230,10 +174,10 @@ bool compare_xref_table(std::map<QPDFObjGen, QPDFXRefEntry> a,
return true;
}
-int main(int argc, char *argv[])
+int
+main(int argc, char* argv[])
{
- if (argc < 2)
- {
+ if (argc < 2) {
usage();
std::exit(2);
}
@@ -242,53 +186,35 @@ int main(int argc, char *argv[])
bool blinearize = false;
bool bpreserve_unreferenced = false;
std::string filename_input;
- for (int i = 1; i < argc; ++i)
- {
- if (argv[i][0] == '-')
- {
+ for (int i = 1; i < argc; ++i) {
+ if (argv[i][0] == '-') {
std::string opt = argv[i];
- if (opt == "--object-streams=preserve")
- {
+ if (opt == "--object-streams=preserve") {
mode = qpdf_o_preserve;
- }
- else if (opt == "--object-streams=disable")
- {
+ } else if (opt == "--object-streams=disable") {
mode = qpdf_o_disable;
- }
- else if (opt == "--object-streams=generate")
- {
+ } else if (opt == "--object-streams=generate") {
mode = qpdf_o_generate;
- }
- else if (opt == "--linearize")
- {
+ } else if (opt == "--linearize") {
blinearize = true;
- }
- else if (opt == "--preserve-unreferenced")
- {
+ } else if (opt == "--preserve-unreferenced") {
bpreserve_unreferenced = true;
- }
- else
- {
+ } else {
usage();
std::exit(2);
}
- }
- else if (argc == i + 1)
- {
+ } else if (argc == i + 1) {
filename_input = argv[i];
break;
- }
- else
- {
+ } else {
usage();
std::exit(2);
}
}
- try
- {
+ try {
QPDF qpdf_in;
- qpdf_in.processFile(filename_input.c_str ());
+ qpdf_in.processFile(filename_input.c_str());
std::vector<QPDFObjectHandle> objs_in = qpdf_in.getAllObjects();
QPDFWriter w(qpdf_in);
@@ -298,65 +224,50 @@ int main(int argc, char *argv[])
w.setPreserveUnreferencedObjects(bpreserve_unreferenced);
w.write();
- std::map<QPDFObjGen, QPDFXRefEntry> xrefs_w
- = w.getWrittenXRefTable();
+ std::map<QPDFObjGen, QPDFXRefEntry> xrefs_w = w.getWrittenXRefTable();
auto buf = w.getBufferSharedPointer();
QPDF qpdf_ren;
- qpdf_ren.processMemoryFile("renumbered",
- reinterpret_cast<char*>(buf->getBuffer()),
- buf->getSize());
- std::map<QPDFObjGen, QPDFXRefEntry> xrefs_ren
- = qpdf_ren.getXRefTable();
+ qpdf_ren.processMemoryFile(
+ "renumbered",
+ reinterpret_cast<char*>(buf->getBuffer()),
+ buf->getSize());
+ std::map<QPDFObjGen, QPDFXRefEntry> xrefs_ren = qpdf_ren.getXRefTable();
- std::cout
- << "--- compare between input and renumbered objects ---"
- << std::endl;
+ std::cout << "--- compare between input and renumbered objects ---"
+ << std::endl;
for (std::vector<QPDFObjectHandle>::iterator iter = objs_in.begin();
- iter != objs_in.end(); ++iter)
- {
+ iter != objs_in.end();
+ ++iter) {
QPDFObjGen og_in = iter->getObjGen();
QPDFObjGen og_ren = w.getRenumberedObjGen(og_in);
- std::cout
- << "input "
- << og_in.getObj() << "/" << og_in.getGen()
- << " -> renumbered "
- << og_ren.getObj() << "/" << og_ren.getGen()
- << std::endl;
+ std::cout << "input " << og_in.getObj() << "/" << og_in.getGen()
+ << " -> renumbered " << og_ren.getObj() << "/"
+ << og_ren.getGen() << std::endl;
- if (og_ren.getObj() == 0)
- {
+ if (og_ren.getObj() == 0) {
std::cout << "deleted" << std::endl;
continue;
}
- if (!compare(*iter, qpdf_ren.getObjectByObjGen(og_ren)))
- {
- std::cerr
- << "different"
- << std::endl;
+ if (!compare(*iter, qpdf_ren.getObjectByObjGen(og_ren))) {
+ std::cerr << "different" << std::endl;
std::exit(2);
}
}
std::cout << "complete" << std::endl;
- std::cout
- << "--- compare between written and reloaded xref tables ---"
- << std::endl;
- if (!compare_xref_table(xrefs_w, xrefs_ren))
- {
- std::cerr
- << "different"
- << std::endl;
+ std::cout << "--- compare between written and reloaded xref tables ---"
+ << std::endl;
+ if (!compare_xref_table(xrefs_w, xrefs_ren)) {
+ std::cerr << "different" << std::endl;
std::exit(2);
}
std::cout << "complete" << std::endl;
std::cout << "succeeded" << std::endl;
- }
- catch (std::exception& e)
- {
+ } catch (std::exception& e) {
std::cerr << e.what() << std::endl;
std::exit(2);
}