Commit 1cc532dc9121d02d92ac6ce5abb9376b4842c05f

Authored by Jay Berkenbilt
1 parent 4e9da59e

QPDFJob: move some helpers from ArgParser to QPDFJob

include/qpdf/QPDFJob.hh
... ... @@ -422,9 +422,17 @@ class QPDFJob
422 422 bool check_requires_password;
423 423 std::shared_ptr<char> infilename;
424 424 std::shared_ptr<char> outfilename;
  425 +
  426 + // Helper functions
  427 + void parseRotationParameter(std::string const&);
  428 + std::vector<int> parseNumrange(char const* range, int max,
  429 + bool throw_error = false);
  430 +
  431 +
425 432 // QXXXQ END-PUBLIC
426 433  
427 434 private:
  435 +
428 436 // Basic file processing
429 437 std::shared_ptr<QPDF> processFile(
430 438 char const* filename, char const* password);
... ...
libqpdf/QPDFJob.cc
... ... @@ -465,6 +465,94 @@ QPDFJob::config()
465 465 }
466 466  
467 467 void
  468 +QPDFJob::parseRotationParameter(std::string const& parameter)
  469 +{
  470 + QPDFJob& o = *this; // QXXXQ
  471 + std::string angle_str;
  472 + std::string range;
  473 + size_t colon = parameter.find(':');
  474 + int relative = 0;
  475 + if (colon != std::string::npos)
  476 + {
  477 + if (colon > 0)
  478 + {
  479 + angle_str = parameter.substr(0, colon);
  480 + }
  481 + if (colon + 1 < parameter.length())
  482 + {
  483 + range = parameter.substr(colon + 1);
  484 + }
  485 + }
  486 + else
  487 + {
  488 + angle_str = parameter;
  489 + }
  490 + if (angle_str.length() > 0)
  491 + {
  492 + char first = angle_str.at(0);
  493 + if ((first == '+') || (first == '-'))
  494 + {
  495 + relative = ((first == '+') ? 1 : -1);
  496 + angle_str = angle_str.substr(1);
  497 + }
  498 + else if (! QUtil::is_digit(angle_str.at(0)))
  499 + {
  500 + angle_str = "";
  501 + }
  502 + }
  503 + if (range.empty())
  504 + {
  505 + range = "1-z";
  506 + }
  507 + bool range_valid = false;
  508 + try
  509 + {
  510 + parseNumrange(range.c_str(), 0, true);
  511 + range_valid = true;
  512 + }
  513 + catch (std::runtime_error const&)
  514 + {
  515 + // ignore
  516 + }
  517 + if (range_valid &&
  518 + ((angle_str == "0") ||(angle_str == "90") ||
  519 + (angle_str == "180") || (angle_str == "270")))
  520 + {
  521 + int angle = QUtil::string_to_int(angle_str.c_str());
  522 + if (relative == -1)
  523 + {
  524 + angle = -angle;
  525 + }
  526 + o.rotations[range] = RotationSpec(angle, (relative != 0));
  527 + }
  528 + else
  529 + {
  530 + throw ConfigError("invalid parameter to rotate: " + parameter);
  531 + }
  532 +}
  533 +
  534 +std::vector<int>
  535 +QPDFJob::parseNumrange(char const* range, int max, bool throw_error)
  536 +{
  537 + try
  538 + {
  539 + return QUtil::parse_numrange(range, max);
  540 + }
  541 + catch (std::runtime_error& e)
  542 + {
  543 + if (throw_error)
  544 + {
  545 + throw(e);
  546 + }
  547 + else
  548 + {
  549 + throw ConfigError(e.what());
  550 + }
  551 + }
  552 + return std::vector<int>();
  553 +}
  554 +
  555 +void
468 556 QPDFJob::run()
469 557 {
470 558 QPDFJob& o = *this; // QXXXQ
... ... @@ -1072,7 +1160,7 @@ QPDFJob::getWantedJSONObjects()
1072 1160 bool trailer;
1073 1161 int obj = 0;
1074 1162 int gen = 0;
1075   - QPDFJob::parse_object_id(iter, trailer, obj, gen);
  1163 + parse_object_id(iter, trailer, obj, gen);
1076 1164 if (obj)
1077 1165 {
1078 1166 wanted_og.insert(QPDFObjGen(obj, gen));
... ... @@ -1806,7 +1894,7 @@ QPDFJob::doJSON(QPDF&amp; pdf)
1806 1894  
1807 1895 // Check against schema
1808 1896  
1809   - JSON schema = QPDFJob::json_schema(&o.json_keys);
  1897 + JSON schema = json_schema(&o.json_keys);
1810 1898 std::list<std::string> errors;
1811 1899 if (! j.checkSchema(schema, errors))
1812 1900 {
... ... @@ -2029,7 +2117,7 @@ QPDFJob::processInputSource(
2029 2117 }
2030 2118  
2031 2119 void
2032   -QPDFJob::validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo)
  2120 +QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo)
2033 2121 {
2034 2122 if (uo->filename.empty())
2035 2123 {
... ... @@ -2089,7 +2177,7 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf(
2089 2177 void
2090 2178 QPDFJob::doUnderOverlayForPage(
2091 2179 QPDF& pdf,
2092   - QPDFJob::UnderOverlay& uo,
  2180 + UnderOverlay& uo,
2093 2181 std::map<int, std::vector<int> >& pagenos,
2094 2182 size_t page_idx,
2095 2183 std::map<int, QPDFObjectHandle>& fo,
... ...
libqpdf/QPDFJob_argv.cc
... ... @@ -37,9 +37,6 @@ namespace
37 37 void initOptionTables();
38 38 void doFinalChecks();
39 39 void parseUnderOverlayOptions(QPDFJob::UnderOverlay*);
40   - void parseRotationParameter(std::string const&);
41   - std::vector<int> parseNumrange(char const* range, int max,
42   - bool throw_error = false);
43 40  
44 41 QPDFArgParser ap;
45 42 QPDFJob& o;
... ... @@ -324,7 +321,7 @@ ArgParser::argPagesPositional(char* arg)
324 321 {
325 322 try
326 323 {
327   - parseNumrange(range, 0, true);
  324 + o.parseNumrange(range, 0, true);
328 325 }
329 326 catch (std::runtime_error& e1)
330 327 {
... ... @@ -384,7 +381,7 @@ ArgParser::argOverlay()
384 381 void
385 382 ArgParser::argRotate(char* parameter)
386 383 {
387   - parseRotationParameter(parameter);
  384 + o.parseRotationParameter(parameter);
388 385 }
389 386  
390 387 void
... ... @@ -592,7 +589,7 @@ ArgParser::argUOPositional(char* arg)
592 589 void
593 590 ArgParser::argUOTo(char* parameter)
594 591 {
595   - parseNumrange(parameter, 0);
  592 + o.parseNumrange(parameter, 0);
596 593 o.under_overlay->to_nr = parameter;
597 594 }
598 595  
... ... @@ -601,7 +598,7 @@ ArgParser::argUOFrom(char* parameter)
601 598 {
602 599 if (strlen(parameter))
603 600 {
604   - parseNumrange(parameter, 0);
  601 + o.parseNumrange(parameter, 0);
605 602 }
606 603 o.under_overlay->from_nr = parameter;
607 604 }
... ... @@ -611,7 +608,7 @@ ArgParser::argUORepeat(char* parameter)
611 608 {
612 609 if (strlen(parameter))
613 610 {
614   - parseNumrange(parameter, 0);
  611 + o.parseNumrange(parameter, 0);
615 612 }
616 613 o.under_overlay->repeat_nr = parameter;
617 614 }
... ... @@ -670,27 +667,6 @@ ArgParser::usage(std::string const&amp; message)
670 667 this->ap.usage(message);
671 668 }
672 669  
673   -std::vector<int>
674   -ArgParser::parseNumrange(char const* range, int max, bool throw_error)
675   -{
676   - try
677   - {
678   - return QUtil::parse_numrange(range, max);
679   - }
680   - catch (std::runtime_error& e)
681   - {
682   - if (throw_error)
683   - {
684   - throw(e);
685   - }
686   - else
687   - {
688   - usage(e.what());
689   - }
690   - }
691   - return std::vector<int>();
692   -}
693   -
694 670 void
695 671 ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
696 672 {
... ... @@ -699,72 +675,6 @@ ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
699 675 }
700 676  
701 677 void
702   -ArgParser::parseRotationParameter(std::string const& parameter)
703   -{
704   - std::string angle_str;
705   - std::string range;
706   - size_t colon = parameter.find(':');
707   - int relative = 0;
708   - if (colon != std::string::npos)
709   - {
710   - if (colon > 0)
711   - {
712   - angle_str = parameter.substr(0, colon);
713   - }
714   - if (colon + 1 < parameter.length())
715   - {
716   - range = parameter.substr(colon + 1);
717   - }
718   - }
719   - else
720   - {
721   - angle_str = parameter;
722   - }
723   - if (angle_str.length() > 0)
724   - {
725   - char first = angle_str.at(0);
726   - if ((first == '+') || (first == '-'))
727   - {
728   - relative = ((first == '+') ? 1 : -1);
729   - angle_str = angle_str.substr(1);
730   - }
731   - else if (! QUtil::is_digit(angle_str.at(0)))
732   - {
733   - angle_str = "";
734   - }
735   - }
736   - if (range.empty())
737   - {
738   - range = "1-z";
739   - }
740   - bool range_valid = false;
741   - try
742   - {
743   - parseNumrange(range.c_str(), 0, true);
744   - range_valid = true;
745   - }
746   - catch (std::runtime_error const&)
747   - {
748   - // ignore
749   - }
750   - if (range_valid &&
751   - ((angle_str == "0") ||(angle_str == "90") ||
752   - (angle_str == "180") || (angle_str == "270")))
753   - {
754   - int angle = QUtil::string_to_int(angle_str.c_str());
755   - if (relative == -1)
756   - {
757   - angle = -angle;
758   - }
759   - o.rotations[range] = QPDFJob::RotationSpec(angle, (relative != 0));
760   - }
761   - else
762   - {
763   - usage("invalid parameter to rotate: " + parameter);
764   - }
765   -}
766   -
767   -void
768 678 ArgParser::parseOptions()
769 679 {
770 680 try
... ...