Commit 08e3050d5f1608d744daafb8b6b39fe6ccea65ed

Authored by Jay Berkenbilt
1 parent a0e70b37

Automated changes for --set-page-labels

This commit contains the changes from generate_auto_job based on
manual changes from the previous commit.
include/qpdf/auto_job_c_set_page_labels.hh 0 → 100644
  1 +//
  2 +// This file is automatically generated by generate_auto_job.
  3 +// Edits will be automatically overwritten if the build is
  4 +// run in maintainer mode.
  5 +//
  6 +// clang-format off
  7 +//
job.sums
@@ -7,14 +7,14 @@ include/qpdf/auto_job_c_enc.hh 28446f3c32153a52afa239ea40503e6cc8ac2c026813526a3 @@ -7,14 +7,14 @@ include/qpdf/auto_job_c_enc.hh 28446f3c32153a52afa239ea40503e6cc8ac2c026813526a3
7 include/qpdf/auto_job_c_main.hh dbfc221d1533120d1aa9c361d8d2483dea5fcb1c0fd95144d98d305e64ed32a6 7 include/qpdf/auto_job_c_main.hh dbfc221d1533120d1aa9c361d8d2483dea5fcb1c0fd95144d98d305e64ed32a6
8 include/qpdf/auto_job_c_pages.hh b3cc0f21029f6d89efa043dcdbfa183cb59325b6506001c18911614fe8e568ec 8 include/qpdf/auto_job_c_pages.hh b3cc0f21029f6d89efa043dcdbfa183cb59325b6506001c18911614fe8e568ec
9 include/qpdf/auto_job_c_uo.hh ae21b69a1efa9333050f4833d465f6daff87e5b38e5106e49bbef5d4132e4ed1 9 include/qpdf/auto_job_c_uo.hh ae21b69a1efa9333050f4833d465f6daff87e5b38e5106e49bbef5d4132e4ed1
10 -job.yml 4f89fc7b622df897d30d403d8035aa36fc7de8d8c43042c736e0300d904cb05c  
11 -libqpdf/qpdf/auto_job_decl.hh 9c6f701c29f3f764d620186bed92685a2edf2e4d11e4f4532862c05470cfc4d2  
12 -libqpdf/qpdf/auto_job_help.hh ea0d0cdebeb190d305bd5f9bca85a4430dbcfa0881ac9be839216b878765b379  
13 -libqpdf/qpdf/auto_job_init.hh b4c2b3724fba61f1206fd3bae81951636852592f67a63ef9539839c2c5995065  
14 -libqpdf/qpdf/auto_job_json_decl.hh 06caa46eaf71db8a50c046f91866baa8087745a9474319fb7c86d92634cc8297  
15 -libqpdf/qpdf/auto_job_json_init.hh f5acb9aa103131cb68dec0e12c4d237a6459bdb49b24773c24f0c2724a462b8f  
16 -libqpdf/qpdf/auto_job_schema.hh b53c006fec2e75b1b73588d242d49a32f7d3db820b1541de106c5d4c27fbb4d9 10 +job.yml 8ad309ac41520b34692bcf22fd5c2ef4810ff69562aed606bd57df7bf589bc43
  11 +libqpdf/qpdf/auto_job_decl.hh 1e8d73891bd1f0b5df5a5ca7405fb76d2d0fd024941b8c1b86489f1b5f9c5772
  12 +libqpdf/qpdf/auto_job_help.hh 8c172913920a5273e04dc4d2059f2d78fc475960ac1738271357056beb02dd27
  13 +libqpdf/qpdf/auto_job_init.hh ea272fd6a6a5e4d23cabd70a7b7d5ecc543b6304008c656dcba2d353d378efc2
  14 +libqpdf/qpdf/auto_job_json_decl.hh 10ffb0d0e5ca09809a5d5d78f66dee393dfd2653a23441436465fd5ace151880
  15 +libqpdf/qpdf/auto_job_json_init.hh 9c3839877ab3b15a47e92086f0b5616da33fd4970538cc423d3b0a7ff33ce66a
  16 +libqpdf/qpdf/auto_job_schema.hh a882939b202d48ad1c0751c094f671ad7aad0fc04c3a4446ad83675db365c8a2
17 manual/_ext/qpdf.py 6add6321666031d55ed4aedf7c00e5662bba856dfcd66ccb526563bffefbb580 17 manual/_ext/qpdf.py 6add6321666031d55ed4aedf7c00e5662bba856dfcd66ccb526563bffefbb580
18 -manual/cli.rst d75ae0584df2217827d6663da1a83bfa78e70599156ef2ca9cfb1236833ffd22  
19 -manual/qpdf.1 738dc9b732ad4c880d034b99f957077628fde1d0006943aaf813e98f8e2f9635 18 +manual/cli.rst 38ff5e0e3a6bc01eab0b7d9f3fd22bfe4ec90ad5dcd48ba8be8412177c7bbf61
  19 +manual/qpdf.1 c89ac263ffb697c7c1f6233fa54bd6403a455a989b550f78868c284947d707a3
20 manual/qpdf.1.in 436ecc85d45c4c9e2dbd1725fb7f0177fb627179469f114561adf3cb6cbb677b 20 manual/qpdf.1.in 436ecc85d45c4c9e2dbd1725fb7f0177fb627179469f114561adf3cb6cbb677b
libqpdf/qpdf/auto_job_decl.hh
@@ -13,6 +13,7 @@ static constexpr char const* O_256_BIT_ENCRYPTION = "256-bit encryption"; @@ -13,6 +13,7 @@ static constexpr char const* O_256_BIT_ENCRYPTION = "256-bit encryption";
13 static constexpr char const* O_UNDERLAY_OVERLAY = "underlay/overlay"; 13 static constexpr char const* O_UNDERLAY_OVERLAY = "underlay/overlay";
14 static constexpr char const* O_ATTACHMENT = "attachment"; 14 static constexpr char const* O_ATTACHMENT = "attachment";
15 static constexpr char const* O_COPY_ATTACHMENT = "copy attachment"; 15 static constexpr char const* O_COPY_ATTACHMENT = "copy attachment";
  16 +static constexpr char const* O_SET_PAGE_LABELS = "set page labels";
16 17
17 void argVersion(); 18 void argVersion();
18 void argCopyright(); 19 void argCopyright();
@@ -27,6 +28,7 @@ void argEncrypt(); @@ -27,6 +28,7 @@ void argEncrypt();
27 void argOverlay(); 28 void argOverlay();
28 void argPages(); 29 void argPages();
29 void argReplaceInput(); 30 void argReplaceInput();
  31 +void argSetPageLabels();
30 void argUnderlay(); 32 void argUnderlay();
31 void argPagesPositional(std::string const&); 33 void argPagesPositional(std::string const&);
32 void argPagesPassword(std::string const&); 34 void argPagesPassword(std::string const&);
@@ -45,3 +47,5 @@ void argAttPositional(std::string const&); @@ -45,3 +47,5 @@ void argAttPositional(std::string const&);
45 void argEndAttachment(); 47 void argEndAttachment();
46 void argCopyAttPositional(std::string const&); 48 void argCopyAttPositional(std::string const&);
47 void argEndCopyAttachment(); 49 void argEndCopyAttachment();
  50 +void argPageLabelsPositional(std::string const&);
  51 +void argEndSetPageLabels();
libqpdf/qpdf/auto_job_help.hh
@@ -402,6 +402,41 @@ ap.addOptionHelp("--keep-inline-images", "modification", "exclude inline images @@ -402,6 +402,41 @@ ap.addOptionHelp("--keep-inline-images", "modification", "exclude inline images
402 )"); 402 )");
403 ap.addOptionHelp("--remove-page-labels", "modification", "remove explicit page numbers", R"(Exclude page labels (explicit page numbers) from the output file. 403 ap.addOptionHelp("--remove-page-labels", "modification", "remove explicit page numbers", R"(Exclude page labels (explicit page numbers) from the output file.
404 )"); 404 )");
  405 +ap.addOptionHelp("--set-page-labels", "modification", "number pages for the entire document", R"(--set-page-labels label-spec ... --
  406 +
  407 +Set page labels (explicit page numbers) for the entire file.
  408 +Each label-spec has the form
  409 +
  410 +first-page:[type][/start[/prefix]]
  411 +
  412 +where
  413 +
  414 +- "first-page" represents a sequential page number using the
  415 + same format as page ranges: a number, a number preceded by "r"
  416 + to indicate counting from the end, or "z" indicating the last
  417 + page
  418 +- "type" is one of
  419 + - D: Arabic numerals (digits)
  420 + - A: Upper-case alphabetic characters
  421 + - a: Lower-case alphabetic characters
  422 + - R: Upper-case Roman numerals
  423 + - r: Lower-case Roman numerals
  424 + - omitted: the page number does not appear, though the prefix,
  425 + if specified will still appear
  426 +- "prefix"` may be any string and is prepended to each page
  427 + label
  428 +
  429 +A given page label spec causes pages to be numbered according to
  430 +that scheme starting with first-page and continuing until the
  431 +next label spec or the end of the document. If you want to omit
  432 +numbering starting at a certain page, you can use first-page: as
  433 +the spec.
  434 +
  435 +Example: "1:r 5:D" would number the first four pages i through
  436 +iv, then the remaining pages with Arabic numerals starting with
  437 +1 and continuing sequentially until the end of the document. For
  438 +additional examples, please consult the manual.
  439 +)");
405 ap.addHelpTopic("encryption", "create encrypted files", R"(Create encrypted files. Usage: 440 ap.addHelpTopic("encryption", "create encrypted files", R"(Create encrypted files. Usage:
406 441
407 --encrypt \ 442 --encrypt \
@@ -485,13 +520,13 @@ ap.addOptionHelp("--user-password", "encryption", "specify user password", R"(-- @@ -485,13 +520,13 @@ ap.addOptionHelp("--user-password", "encryption", "specify user password", R"(--
485 520
486 Set the user password of the encrypted file. 521 Set the user password of the encrypted file.
487 )"); 522 )");
  523 +}
  524 +static void add_help_5(QPDFArgParser& ap)
  525 +{
488 ap.addOptionHelp("--owner-password", "encryption", "specify owner password", R"(--owner-password=owner-password 526 ap.addOptionHelp("--owner-password", "encryption", "specify owner password", R"(--owner-password=owner-password
489 527
490 Set the owner password of the encrypted file. 528 Set the owner password of the encrypted file.
491 )"); 529 )");
492 -}  
493 -static void add_help_5(QPDFArgParser& ap)  
494 -{  
495 ap.addOptionHelp("--bits", "encryption", "specify encryption key length", R"(--bits={48|128|256} 530 ap.addOptionHelp("--bits", "encryption", "specify encryption key length", R"(--bits={48|128|256}
496 531
497 Specify the encryption key length. For best security, always use 532 Specify the encryption key length. For best security, always use
@@ -665,15 +700,15 @@ the destination pages. See qpdf --help=page-ranges for help @@ -665,15 +700,15 @@ the destination pages. See qpdf --help=page-ranges for help
665 with the page range syntax. The page range may be omitted 700 with the page range syntax. The page range may be omitted
666 if --repeat is used. 701 if --repeat is used.
667 )"); 702 )");
  703 +}
  704 +static void add_help_6(QPDFArgParser& ap)
  705 +{
668 ap.addOptionHelp("--repeat", "overlay-underlay", "overlay/underlay pages to repeat", R"(--repeat=page-range 706 ap.addOptionHelp("--repeat", "overlay-underlay", "overlay/underlay pages to repeat", R"(--repeat=page-range
669 707
670 Specify pages from the overlay/underlay that are repeated after 708 Specify pages from the overlay/underlay that are repeated after
671 "from" pages have been exhausted. See qpdf --help=page-ranges 709 "from" pages have been exhausted. See qpdf --help=page-ranges
672 for help with the page range syntax. 710 for help with the page range syntax.
673 )"); 711 )");
674 -}  
675 -static void add_help_6(QPDFArgParser& ap)  
676 -{  
677 ap.addHelpTopic("attachments", "work with embedded files", R"(It is possible to list, add, or delete embedded files (also known 712 ap.addHelpTopic("attachments", "work with embedded files", R"(It is possible to list, add, or delete embedded files (also known
678 as attachments) and to copy attachments from other files. See help 713 as attachments) and to copy attachments from other files. See help
679 on individual options for details. Run qpdf --help=add-attachment 714 on individual options for details. Run qpdf --help=add-attachment
@@ -782,6 +817,9 @@ ap.addOptionHelp("--requires-password", "inspection", "silently test a file's pa @@ -782,6 +817,9 @@ ap.addOptionHelp("--requires-password", "inspection", "silently test a file's pa
782 2: the file is not encrypted 817 2: the file is not encrypted
783 3: the file is encrypted, and correct password (if any) has been supplied 818 3: the file is encrypted, and correct password (if any) has been supplied
784 )"); 819 )");
  820 +}
  821 +static void add_help_7(QPDFArgParser& ap)
  822 +{
785 ap.addOptionHelp("--check", "inspection", "partially check whether PDF is valid", R"(Check the structure of the PDF file as well as a number of other 823 ap.addOptionHelp("--check", "inspection", "partially check whether PDF is valid", R"(Check the structure of the PDF file as well as a number of other
786 aspects of the file, and write information about the file to 824 aspects of the file, and write information about the file to
787 standard output. Note that qpdf does not perform any validation 825 standard output. Note that qpdf does not perform any validation
@@ -789,9 +827,6 @@ of the actual PDF page content or semantic correctness of the @@ -789,9 +827,6 @@ of the actual PDF page content or semantic correctness of the
789 PDF file. It merely checks that the PDF file is syntactically 827 PDF file. It merely checks that the PDF file is syntactically
790 valid. See also qpdf --help=exit-status. 828 valid. See also qpdf --help=exit-status.
791 )"); 829 )");
792 -}  
793 -static void add_help_7(QPDFArgParser& ap)  
794 -{  
795 ap.addOptionHelp("--show-encryption", "inspection", "information about encrypted files", R"(Show document encryption parameters. Also show the document's 830 ap.addOptionHelp("--show-encryption", "inspection", "information about encrypted files", R"(Show document encryption parameters. Also show the document's
796 user password if the owner password is given and the file was 831 user password if the owner password is given and the file was
797 encrypted using older encryption formats that allow user 832 encrypted using older encryption formats that allow user
@@ -872,6 +907,9 @@ This option is repeatable. If given, only specified objects will @@ -872,6 +907,9 @@ This option is repeatable. If given, only specified objects will
872 be shown in the "objects" key of the JSON output. Otherwise, all 907 be shown in the "objects" key of the JSON output. Otherwise, all
873 objects will be shown. 908 objects will be shown.
874 )"); 909 )");
  910 +}
  911 +static void add_help_8(QPDFArgParser& ap)
  912 +{
875 ap.addOptionHelp("--json-stream-data", "json", "how to handle streams in json output", R"(--json-stream-data={none|inline|file} 913 ap.addOptionHelp("--json-stream-data", "json", "how to handle streams in json output", R"(--json-stream-data={none|inline|file}
876 914
877 When used with --json, this option controls whether streams in 915 When used with --json, this option controls whether streams in
@@ -883,9 +921,6 @@ object number. The prefix can be overridden with @@ -883,9 +921,6 @@ object number. The prefix can be overridden with
883 when --json-output is specified, in which case the default is 921 when --json-output is specified, in which case the default is
884 "inline". 922 "inline".
885 )"); 923 )");
886 -}  
887 -static void add_help_8(QPDFArgParser& ap)  
888 -{  
889 ap.addOptionHelp("--json-stream-prefix", "json", "prefix for json stream data files", R"(--json-stream-prefix=file-prefix 924 ap.addOptionHelp("--json-stream-prefix", "json", "prefix for json stream data files", R"(--json-stream-prefix=file-prefix
890 925
891 When used with --json-stream-data=file, --json-stream-data=file-prefix 926 When used with --json-stream-data=file, --json-stream-data=file-prefix
libqpdf/qpdf/auto_job_init.hh
@@ -73,6 +73,7 @@ this->ap.addBare("replace-input", b(&ArgParser::argReplaceInput)); @@ -73,6 +73,7 @@ this->ap.addBare("replace-input", b(&ArgParser::argReplaceInput));
73 this->ap.addBare("report-memory-usage", [this](){c_main->reportMemoryUsage();}); 73 this->ap.addBare("report-memory-usage", [this](){c_main->reportMemoryUsage();});
74 this->ap.addBare("requires-password", [this](){c_main->requiresPassword();}); 74 this->ap.addBare("requires-password", [this](){c_main->requiresPassword();});
75 this->ap.addBare("remove-restrictions", [this](){c_main->removeRestrictions();}); 75 this->ap.addBare("remove-restrictions", [this](){c_main->removeRestrictions();});
  76 +this->ap.addBare("set-page-labels", b(&ArgParser::argSetPageLabels));
76 this->ap.addBare("show-encryption", [this](){c_main->showEncryption();}); 77 this->ap.addBare("show-encryption", [this](){c_main->showEncryption();});
77 this->ap.addBare("show-encryption-key", [this](){c_main->showEncryptionKey();}); 78 this->ap.addBare("show-encryption-key", [this](){c_main->showEncryptionKey();});
78 this->ap.addBare("show-linearization", [this](){c_main->showLinearization();}); 79 this->ap.addBare("show-linearization", [this](){c_main->showLinearization();});
@@ -180,3 +181,5 @@ this->ap.registerOptionTable("copy attachment", b(&ArgParser::argEndCopyAttachme @@ -180,3 +181,5 @@ this->ap.registerOptionTable("copy attachment", b(&ArgParser::argEndCopyAttachme
180 this->ap.addPositional(p(&ArgParser::argCopyAttPositional)); 181 this->ap.addPositional(p(&ArgParser::argCopyAttPositional));
181 this->ap.addRequiredParameter("prefix", [this](std::string const& x){c_copy_att->prefix(x);}, "prefix"); 182 this->ap.addRequiredParameter("prefix", [this](std::string const& x){c_copy_att->prefix(x);}, "prefix");
182 this->ap.addRequiredParameter("password", [this](std::string const& x){c_copy_att->password(x);}, "password"); 183 this->ap.addRequiredParameter("password", [this](std::string const& x){c_copy_att->password(x);}, "password");
  184 +this->ap.registerOptionTable("set page labels", b(&ArgParser::argEndSetPageLabels));
  185 +this->ap.addPositional(p(&ArgParser::argPageLabelsPositional));
libqpdf/qpdf/auto_job_json_decl.hh
@@ -44,6 +44,9 @@ void endPages(); @@ -44,6 +44,9 @@ void endPages();
44 void setupPagesFile(); 44 void setupPagesFile();
45 void setupPagesPassword(); 45 void setupPagesPassword();
46 void setupPagesRange(); 46 void setupPagesRange();
  47 +void beginSetPageLabelsArray(JSON);
  48 +void endSetPageLabelsArray();
  49 +void setupSetPageLabels();
47 void beginOverlay(JSON); 50 void beginOverlay(JSON);
48 void endOverlay(); 51 void endOverlay();
49 void setupOverlayFile(); 52 void setupOverlayFile();
libqpdf/qpdf/auto_job_json_init.hh
@@ -421,6 +421,11 @@ popHandler(); // key: reportMemoryUsage @@ -421,6 +421,11 @@ popHandler(); // key: reportMemoryUsage
421 pushKey("rotate"); 421 pushKey("rotate");
422 addParameter([this](std::string const& p) { c_main->rotate(p); }); 422 addParameter([this](std::string const& p) { c_main->rotate(p); });
423 popHandler(); // key: rotate 423 popHandler(); // key: rotate
  424 +pushKey("setPageLabels");
  425 +beginArray(bindJSON(&Handlers::beginSetPageLabelsArray), bindBare(&Handlers::endSetPageLabelsArray)); // .setPageLabels[]
  426 +setupSetPageLabels();
  427 +popHandler(); // array: .setPageLabels[]
  428 +popHandler(); // key: setPageLabels
424 pushKey("overlay"); 429 pushKey("overlay");
425 beginDict(bindJSON(&Handlers::beginOverlay), bindBare(&Handlers::endOverlay)); // .overlay 430 beginDict(bindJSON(&Handlers::beginOverlay), bindBare(&Handlers::endOverlay)); // .overlay
426 pushKey("file"); 431 pushKey("file");
libqpdf/qpdf/auto_job_schema.hh
@@ -148,6 +148,9 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({ @@ -148,6 +148,9 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
148 "removePageLabels": "remove explicit page numbers", 148 "removePageLabels": "remove explicit page numbers",
149 "reportMemoryUsage": "best effort report of memory usage", 149 "reportMemoryUsage": "best effort report of memory usage",
150 "rotate": "rotate pages", 150 "rotate": "rotate pages",
  151 + "setPageLabels": [
  152 + "number pages for the entire document"
  153 + ],
151 "overlay": { 154 "overlay": {
152 "file": "source file for overlay", 155 "file": "source file for overlay",
153 "password": "password for encrypted file", 156 "password": "password for encrypted file",
manual/qpdf.1
@@ -516,6 +516,45 @@ Prevent inline images from being considered by --optimize-images. @@ -516,6 +516,45 @@ Prevent inline images from being considered by --optimize-images.
516 .TP 516 .TP
517 .B --remove-page-labels \-\- remove explicit page numbers 517 .B --remove-page-labels \-\- remove explicit page numbers
518 Exclude page labels (explicit page numbers) from the output file. 518 Exclude page labels (explicit page numbers) from the output file.
  519 +.TP
  520 +.B --set-page-labels \-\- number pages for the entire document
  521 +--set-page-labels label-spec ... --
  522 +
  523 +Set page labels (explicit page numbers) for the entire file.
  524 +Each label-spec has the form
  525 +
  526 +first-page:[type][/start[/prefix]]
  527 +
  528 +where
  529 +
  530 +.IP \[bu]
  531 +"first-page" represents a sequential page number using the
  532 +same format as page ranges: a number, a number preceded by "r"
  533 +to indicate counting from the end, or "z" indicating the last
  534 +page
  535 +.IP \[bu]
  536 +"type" is one of
  537 +- D: Arabic numerals (digits)
  538 +- A: Upper-case alphabetic characters
  539 +- a: Lower-case alphabetic characters
  540 +- R: Upper-case Roman numerals
  541 +- r: Lower-case Roman numerals
  542 +- omitted: the page number does not appear, though the prefix,
  543 + if specified will still appear
  544 +.IP \[bu]
  545 +"prefix"` may be any string and is prepended to each page
  546 +label
  547 +
  548 +A given page label spec causes pages to be numbered according to
  549 +that scheme starting with first-page and continuing until the
  550 +next label spec or the end of the document. If you want to omit
  551 +numbering starting at a certain page, you can use first-page: as
  552 +the spec.
  553 +
  554 +Example: "1:r 5:D" would number the first four pages i through
  555 +iv, then the remaining pages with Arabic numerals starting with
  556 +1 and continuing sequentially until the end of the document. For
  557 +additional examples, please consult the manual.
519 .SH ENCRYPTION (create encrypted files) 558 .SH ENCRYPTION (create encrypted files)
520 Create encrypted files. Usage: 559 Create encrypted files. Usage:
521 560