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,9 +422,17 @@ class QPDFJob
422 bool check_requires_password; 422 bool check_requires_password;
423 std::shared_ptr<char> infilename; 423 std::shared_ptr<char> infilename;
424 std::shared_ptr<char> outfilename; 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 // QXXXQ END-PUBLIC 432 // QXXXQ END-PUBLIC
426 433
427 private: 434 private:
  435 +
428 // Basic file processing 436 // Basic file processing
429 std::shared_ptr<QPDF> processFile( 437 std::shared_ptr<QPDF> processFile(
430 char const* filename, char const* password); 438 char const* filename, char const* password);
libqpdf/QPDFJob.cc
@@ -465,6 +465,94 @@ QPDFJob::config() @@ -465,6 +465,94 @@ QPDFJob::config()
465 } 465 }
466 466
467 void 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 QPDFJob::run() 556 QPDFJob::run()
469 { 557 {
470 QPDFJob& o = *this; // QXXXQ 558 QPDFJob& o = *this; // QXXXQ
@@ -1072,7 +1160,7 @@ QPDFJob::getWantedJSONObjects() @@ -1072,7 +1160,7 @@ QPDFJob::getWantedJSONObjects()
1072 bool trailer; 1160 bool trailer;
1073 int obj = 0; 1161 int obj = 0;
1074 int gen = 0; 1162 int gen = 0;
1075 - QPDFJob::parse_object_id(iter, trailer, obj, gen); 1163 + parse_object_id(iter, trailer, obj, gen);
1076 if (obj) 1164 if (obj)
1077 { 1165 {
1078 wanted_og.insert(QPDFObjGen(obj, gen)); 1166 wanted_og.insert(QPDFObjGen(obj, gen));
@@ -1806,7 +1894,7 @@ QPDFJob::doJSON(QPDF&amp; pdf) @@ -1806,7 +1894,7 @@ QPDFJob::doJSON(QPDF&amp; pdf)
1806 1894
1807 // Check against schema 1895 // Check against schema
1808 1896
1809 - JSON schema = QPDFJob::json_schema(&o.json_keys); 1897 + JSON schema = json_schema(&o.json_keys);
1810 std::list<std::string> errors; 1898 std::list<std::string> errors;
1811 if (! j.checkSchema(schema, errors)) 1899 if (! j.checkSchema(schema, errors))
1812 { 1900 {
@@ -2029,7 +2117,7 @@ QPDFJob::processInputSource( @@ -2029,7 +2117,7 @@ QPDFJob::processInputSource(
2029 } 2117 }
2030 2118
2031 void 2119 void
2032 -QPDFJob::validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo) 2120 +QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo)
2033 { 2121 {
2034 if (uo->filename.empty()) 2122 if (uo->filename.empty())
2035 { 2123 {
@@ -2089,7 +2177,7 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf( @@ -2089,7 +2177,7 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf(
2089 void 2177 void
2090 QPDFJob::doUnderOverlayForPage( 2178 QPDFJob::doUnderOverlayForPage(
2091 QPDF& pdf, 2179 QPDF& pdf,
2092 - QPDFJob::UnderOverlay& uo, 2180 + UnderOverlay& uo,
2093 std::map<int, std::vector<int> >& pagenos, 2181 std::map<int, std::vector<int> >& pagenos,
2094 size_t page_idx, 2182 size_t page_idx,
2095 std::map<int, QPDFObjectHandle>& fo, 2183 std::map<int, QPDFObjectHandle>& fo,
libqpdf/QPDFJob_argv.cc
@@ -37,9 +37,6 @@ namespace @@ -37,9 +37,6 @@ namespace
37 void initOptionTables(); 37 void initOptionTables();
38 void doFinalChecks(); 38 void doFinalChecks();
39 void parseUnderOverlayOptions(QPDFJob::UnderOverlay*); 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 QPDFArgParser ap; 41 QPDFArgParser ap;
45 QPDFJob& o; 42 QPDFJob& o;
@@ -324,7 +321,7 @@ ArgParser::argPagesPositional(char* arg) @@ -324,7 +321,7 @@ ArgParser::argPagesPositional(char* arg)
324 { 321 {
325 try 322 try
326 { 323 {
327 - parseNumrange(range, 0, true); 324 + o.parseNumrange(range, 0, true);
328 } 325 }
329 catch (std::runtime_error& e1) 326 catch (std::runtime_error& e1)
330 { 327 {
@@ -384,7 +381,7 @@ ArgParser::argOverlay() @@ -384,7 +381,7 @@ ArgParser::argOverlay()
384 void 381 void
385 ArgParser::argRotate(char* parameter) 382 ArgParser::argRotate(char* parameter)
386 { 383 {
387 - parseRotationParameter(parameter); 384 + o.parseRotationParameter(parameter);
388 } 385 }
389 386
390 void 387 void
@@ -592,7 +589,7 @@ ArgParser::argUOPositional(char* arg) @@ -592,7 +589,7 @@ ArgParser::argUOPositional(char* arg)
592 void 589 void
593 ArgParser::argUOTo(char* parameter) 590 ArgParser::argUOTo(char* parameter)
594 { 591 {
595 - parseNumrange(parameter, 0); 592 + o.parseNumrange(parameter, 0);
596 o.under_overlay->to_nr = parameter; 593 o.under_overlay->to_nr = parameter;
597 } 594 }
598 595
@@ -601,7 +598,7 @@ ArgParser::argUOFrom(char* parameter) @@ -601,7 +598,7 @@ ArgParser::argUOFrom(char* parameter)
601 { 598 {
602 if (strlen(parameter)) 599 if (strlen(parameter))
603 { 600 {
604 - parseNumrange(parameter, 0); 601 + o.parseNumrange(parameter, 0);
605 } 602 }
606 o.under_overlay->from_nr = parameter; 603 o.under_overlay->from_nr = parameter;
607 } 604 }
@@ -611,7 +608,7 @@ ArgParser::argUORepeat(char* parameter) @@ -611,7 +608,7 @@ ArgParser::argUORepeat(char* parameter)
611 { 608 {
612 if (strlen(parameter)) 609 if (strlen(parameter))
613 { 610 {
614 - parseNumrange(parameter, 0); 611 + o.parseNumrange(parameter, 0);
615 } 612 }
616 o.under_overlay->repeat_nr = parameter; 613 o.under_overlay->repeat_nr = parameter;
617 } 614 }
@@ -670,27 +667,6 @@ ArgParser::usage(std::string const&amp; message) @@ -670,27 +667,6 @@ ArgParser::usage(std::string const&amp; message)
670 this->ap.usage(message); 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 void 670 void
695 ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo) 671 ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
696 { 672 {
@@ -699,72 +675,6 @@ ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo) @@ -699,72 +675,6 @@ ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
699 } 675 }
700 676
701 void 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 ArgParser::parseOptions() 678 ArgParser::parseOptions()
769 { 679 {
770 try 680 try