Commit 1cc532dc9121d02d92ac6ce5abb9376b4842c05f
1 parent
4e9da59e
QPDFJob: move some helpers from ArgParser to QPDFJob
Showing
3 changed files
with
105 additions
and
99 deletions
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& 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& 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 | ... | ... |