mirror of
https://github.com/qpdf/qpdf.git
synced 2024-05-29 16:30:53 +00:00
QPDFJob: move some helpers from ArgParser to QPDFJob
This commit is contained in:
parent
4e9da59eac
commit
1cc532dc91
|
@ -422,9 +422,17 @@ class QPDFJob
|
||||||
bool check_requires_password;
|
bool check_requires_password;
|
||||||
std::shared_ptr<char> infilename;
|
std::shared_ptr<char> infilename;
|
||||||
std::shared_ptr<char> outfilename;
|
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
|
// QXXXQ END-PUBLIC
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Basic file processing
|
// Basic file processing
|
||||||
std::shared_ptr<QPDF> processFile(
|
std::shared_ptr<QPDF> processFile(
|
||||||
char const* filename, char const* password);
|
char const* filename, char const* password);
|
||||||
|
|
|
@ -464,6 +464,94 @@ QPDFJob::config()
|
||||||
return std::shared_ptr<Config>(new Config(*this));
|
return std::shared_ptr<Config>(new Config(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
void
|
||||||
QPDFJob::run()
|
QPDFJob::run()
|
||||||
{
|
{
|
||||||
|
@ -1072,7 +1160,7 @@ QPDFJob::getWantedJSONObjects()
|
||||||
bool trailer;
|
bool trailer;
|
||||||
int obj = 0;
|
int obj = 0;
|
||||||
int gen = 0;
|
int gen = 0;
|
||||||
QPDFJob::parse_object_id(iter, trailer, obj, gen);
|
parse_object_id(iter, trailer, obj, gen);
|
||||||
if (obj)
|
if (obj)
|
||||||
{
|
{
|
||||||
wanted_og.insert(QPDFObjGen(obj, gen));
|
wanted_og.insert(QPDFObjGen(obj, gen));
|
||||||
|
@ -1806,7 +1894,7 @@ QPDFJob::doJSON(QPDF& pdf)
|
||||||
|
|
||||||
// Check against schema
|
// Check against schema
|
||||||
|
|
||||||
JSON schema = QPDFJob::json_schema(&o.json_keys);
|
JSON schema = json_schema(&o.json_keys);
|
||||||
std::list<std::string> errors;
|
std::list<std::string> errors;
|
||||||
if (! j.checkSchema(schema, errors))
|
if (! j.checkSchema(schema, errors))
|
||||||
{
|
{
|
||||||
|
@ -2029,7 +2117,7 @@ QPDFJob::processInputSource(
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
QPDFJob::validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo)
|
QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo)
|
||||||
{
|
{
|
||||||
if (uo->filename.empty())
|
if (uo->filename.empty())
|
||||||
{
|
{
|
||||||
|
@ -2089,7 +2177,7 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf(
|
||||||
void
|
void
|
||||||
QPDFJob::doUnderOverlayForPage(
|
QPDFJob::doUnderOverlayForPage(
|
||||||
QPDF& pdf,
|
QPDF& pdf,
|
||||||
QPDFJob::UnderOverlay& uo,
|
UnderOverlay& uo,
|
||||||
std::map<int, std::vector<int> >& pagenos,
|
std::map<int, std::vector<int> >& pagenos,
|
||||||
size_t page_idx,
|
size_t page_idx,
|
||||||
std::map<int, QPDFObjectHandle>& fo,
|
std::map<int, QPDFObjectHandle>& fo,
|
||||||
|
|
|
@ -37,9 +37,6 @@ namespace
|
||||||
void initOptionTables();
|
void initOptionTables();
|
||||||
void doFinalChecks();
|
void doFinalChecks();
|
||||||
void parseUnderOverlayOptions(QPDFJob::UnderOverlay*);
|
void parseUnderOverlayOptions(QPDFJob::UnderOverlay*);
|
||||||
void parseRotationParameter(std::string const&);
|
|
||||||
std::vector<int> parseNumrange(char const* range, int max,
|
|
||||||
bool throw_error = false);
|
|
||||||
|
|
||||||
QPDFArgParser ap;
|
QPDFArgParser ap;
|
||||||
QPDFJob& o;
|
QPDFJob& o;
|
||||||
|
@ -324,7 +321,7 @@ ArgParser::argPagesPositional(char* arg)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
parseNumrange(range, 0, true);
|
o.parseNumrange(range, 0, true);
|
||||||
}
|
}
|
||||||
catch (std::runtime_error& e1)
|
catch (std::runtime_error& e1)
|
||||||
{
|
{
|
||||||
|
@ -384,7 +381,7 @@ ArgParser::argOverlay()
|
||||||
void
|
void
|
||||||
ArgParser::argRotate(char* parameter)
|
ArgParser::argRotate(char* parameter)
|
||||||
{
|
{
|
||||||
parseRotationParameter(parameter);
|
o.parseRotationParameter(parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -592,7 +589,7 @@ ArgParser::argUOPositional(char* arg)
|
||||||
void
|
void
|
||||||
ArgParser::argUOTo(char* parameter)
|
ArgParser::argUOTo(char* parameter)
|
||||||
{
|
{
|
||||||
parseNumrange(parameter, 0);
|
o.parseNumrange(parameter, 0);
|
||||||
o.under_overlay->to_nr = parameter;
|
o.under_overlay->to_nr = parameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,7 +598,7 @@ ArgParser::argUOFrom(char* parameter)
|
||||||
{
|
{
|
||||||
if (strlen(parameter))
|
if (strlen(parameter))
|
||||||
{
|
{
|
||||||
parseNumrange(parameter, 0);
|
o.parseNumrange(parameter, 0);
|
||||||
}
|
}
|
||||||
o.under_overlay->from_nr = parameter;
|
o.under_overlay->from_nr = parameter;
|
||||||
}
|
}
|
||||||
|
@ -611,7 +608,7 @@ ArgParser::argUORepeat(char* parameter)
|
||||||
{
|
{
|
||||||
if (strlen(parameter))
|
if (strlen(parameter))
|
||||||
{
|
{
|
||||||
parseNumrange(parameter, 0);
|
o.parseNumrange(parameter, 0);
|
||||||
}
|
}
|
||||||
o.under_overlay->repeat_nr = parameter;
|
o.under_overlay->repeat_nr = parameter;
|
||||||
}
|
}
|
||||||
|
@ -670,27 +667,6 @@ ArgParser::usage(std::string const& message)
|
||||||
this->ap.usage(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
|
void
|
||||||
ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
|
ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
|
||||||
{
|
{
|
||||||
|
@ -698,72 +674,6 @@ ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
|
||||||
this->ap.selectOptionTable(O_UNDERLAY_OVERLAY);
|
this->ap.selectOptionTable(O_UNDERLAY_OVERLAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
void
|
||||||
ArgParser::parseOptions()
|
ArgParser::parseOptions()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user