aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/QPDFJob.hh8
-rw-r--r--libqpdf/QPDFJob.cc96
-rw-r--r--libqpdf/QPDFJob_argv.cc100
3 files changed, 105 insertions, 99 deletions
diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh
index 5d29e34e..6445665a 100644
--- a/include/qpdf/QPDFJob.hh
+++ b/include/qpdf/QPDFJob.hh
@@ -422,9 +422,17 @@ class QPDFJob
bool check_requires_password;
std::shared_ptr<char> infilename;
std::shared_ptr<char> outfilename;
+
+ // Helper functions
+ void parseRotationParameter(std::string const&);
+ std::vector<int> parseNumrange(char const* range, int max,
+ bool throw_error = false);
+
+
// QXXXQ END-PUBLIC
private:
+
// Basic file processing
std::shared_ptr<QPDF> processFile(
char const* filename, char const* password);
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index eb06e076..85df861b 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -465,6 +465,94 @@ QPDFJob::config()
}
void
+QPDFJob::parseRotationParameter(std::string const& parameter)
+{
+ QPDFJob& o = *this; // QXXXQ
+ std::string angle_str;
+ std::string range;
+ size_t colon = parameter.find(':');
+ int relative = 0;
+ if (colon != std::string::npos)
+ {
+ if (colon > 0)
+ {
+ angle_str = parameter.substr(0, colon);
+ }
+ if (colon + 1 < parameter.length())
+ {
+ range = parameter.substr(colon + 1);
+ }
+ }
+ else
+ {
+ angle_str = parameter;
+ }
+ if (angle_str.length() > 0)
+ {
+ char first = angle_str.at(0);
+ if ((first == '+') || (first == '-'))
+ {
+ relative = ((first == '+') ? 1 : -1);
+ angle_str = angle_str.substr(1);
+ }
+ else if (! QUtil::is_digit(angle_str.at(0)))
+ {
+ angle_str = "";
+ }
+ }
+ if (range.empty())
+ {
+ range = "1-z";
+ }
+ bool range_valid = false;
+ try
+ {
+ parseNumrange(range.c_str(), 0, true);
+ range_valid = true;
+ }
+ catch (std::runtime_error const&)
+ {
+ // ignore
+ }
+ if (range_valid &&
+ ((angle_str == "0") ||(angle_str == "90") ||
+ (angle_str == "180") || (angle_str == "270")))
+ {
+ int angle = QUtil::string_to_int(angle_str.c_str());
+ if (relative == -1)
+ {
+ angle = -angle;
+ }
+ o.rotations[range] = RotationSpec(angle, (relative != 0));
+ }
+ else
+ {
+ throw ConfigError("invalid parameter to rotate: " + parameter);
+ }
+}
+
+std::vector<int>
+QPDFJob::parseNumrange(char const* range, int max, bool throw_error)
+{
+ try
+ {
+ return QUtil::parse_numrange(range, max);
+ }
+ catch (std::runtime_error& e)
+ {
+ if (throw_error)
+ {
+ throw(e);
+ }
+ else
+ {
+ throw ConfigError(e.what());
+ }
+ }
+ return std::vector<int>();
+}
+
+void
QPDFJob::run()
{
QPDFJob& o = *this; // QXXXQ
@@ -1072,7 +1160,7 @@ QPDFJob::getWantedJSONObjects()
bool trailer;
int obj = 0;
int gen = 0;
- QPDFJob::parse_object_id(iter, trailer, obj, gen);
+ parse_object_id(iter, trailer, obj, gen);
if (obj)
{
wanted_og.insert(QPDFObjGen(obj, gen));
@@ -1806,7 +1894,7 @@ QPDFJob::doJSON(QPDF& pdf)
// Check against schema
- JSON schema = QPDFJob::json_schema(&o.json_keys);
+ JSON schema = json_schema(&o.json_keys);
std::list<std::string> errors;
if (! j.checkSchema(schema, errors))
{
@@ -2029,7 +2117,7 @@ QPDFJob::processInputSource(
}
void
-QPDFJob::validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo)
+QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo)
{
if (uo->filename.empty())
{
@@ -2089,7 +2177,7 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf(
void
QPDFJob::doUnderOverlayForPage(
QPDF& pdf,
- QPDFJob::UnderOverlay& uo,
+ UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos,
size_t page_idx,
std::map<int, QPDFObjectHandle>& fo,
diff --git a/libqpdf/QPDFJob_argv.cc b/libqpdf/QPDFJob_argv.cc
index a11eca9f..7cd8e22e 100644
--- a/libqpdf/QPDFJob_argv.cc
+++ b/libqpdf/QPDFJob_argv.cc
@@ -37,9 +37,6 @@ namespace
void initOptionTables();
void doFinalChecks();
void parseUnderOverlayOptions(QPDFJob::UnderOverlay*);
- void parseRotationParameter(std::string const&);
- std::vector<int> parseNumrange(char const* range, int max,
- bool throw_error = false);
QPDFArgParser ap;
QPDFJob& o;
@@ -324,7 +321,7 @@ ArgParser::argPagesPositional(char* arg)
{
try
{
- parseNumrange(range, 0, true);
+ o.parseNumrange(range, 0, true);
}
catch (std::runtime_error& e1)
{
@@ -384,7 +381,7 @@ ArgParser::argOverlay()
void
ArgParser::argRotate(char* parameter)
{
- parseRotationParameter(parameter);
+ o.parseRotationParameter(parameter);
}
void
@@ -592,7 +589,7 @@ ArgParser::argUOPositional(char* arg)
void
ArgParser::argUOTo(char* parameter)
{
- parseNumrange(parameter, 0);
+ o.parseNumrange(parameter, 0);
o.under_overlay->to_nr = parameter;
}
@@ -601,7 +598,7 @@ ArgParser::argUOFrom(char* parameter)
{
if (strlen(parameter))
{
- parseNumrange(parameter, 0);
+ o.parseNumrange(parameter, 0);
}
o.under_overlay->from_nr = parameter;
}
@@ -611,7 +608,7 @@ ArgParser::argUORepeat(char* parameter)
{
if (strlen(parameter))
{
- parseNumrange(parameter, 0);
+ o.parseNumrange(parameter, 0);
}
o.under_overlay->repeat_nr = parameter;
}
@@ -670,27 +667,6 @@ ArgParser::usage(std::string const& message)
this->ap.usage(message);
}
-std::vector<int>
-ArgParser::parseNumrange(char const* range, int max, bool throw_error)
-{
- try
- {
- return QUtil::parse_numrange(range, max);
- }
- catch (std::runtime_error& e)
- {
- if (throw_error)
- {
- throw(e);
- }
- else
- {
- usage(e.what());
- }
- }
- return std::vector<int>();
-}
-
void
ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
{
@@ -699,72 +675,6 @@ ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
}
void
-ArgParser::parseRotationParameter(std::string const& parameter)
-{
- std::string angle_str;
- std::string range;
- size_t colon = parameter.find(':');
- int relative = 0;
- if (colon != std::string::npos)
- {
- if (colon > 0)
- {
- angle_str = parameter.substr(0, colon);
- }
- if (colon + 1 < parameter.length())
- {
- range = parameter.substr(colon + 1);
- }
- }
- else
- {
- angle_str = parameter;
- }
- if (angle_str.length() > 0)
- {
- char first = angle_str.at(0);
- if ((first == '+') || (first == '-'))
- {
- relative = ((first == '+') ? 1 : -1);
- angle_str = angle_str.substr(1);
- }
- else if (! QUtil::is_digit(angle_str.at(0)))
- {
- angle_str = "";
- }
- }
- if (range.empty())
- {
- range = "1-z";
- }
- bool range_valid = false;
- try
- {
- parseNumrange(range.c_str(), 0, true);
- range_valid = true;
- }
- catch (std::runtime_error const&)
- {
- // ignore
- }
- if (range_valid &&
- ((angle_str == "0") ||(angle_str == "90") ||
- (angle_str == "180") || (angle_str == "270")))
- {
- int angle = QUtil::string_to_int(angle_str.c_str());
- if (relative == -1)
- {
- angle = -angle;
- }
- o.rotations[range] = QPDFJob::RotationSpec(angle, (relative != 0));
- }
- else
- {
- usage("invalid parameter to rotate: " + parameter);
- }
-}
-
-void
ArgParser::parseOptions()
{
try