Commit f60526aff93ef1049242b215a9f247dca4c7f99e

Authored by Jay Berkenbilt
1 parent b4b0df0d

QPDFJob: start changing generation for trivial config handlers

generate_auto_job
@@ -19,6 +19,58 @@ def warn(*args, **kwargs): @@ -19,6 +19,58 @@ def warn(*args, **kwargs):
19 print(*args, file=sys.stderr, **kwargs) 19 print(*args, file=sys.stderr, **kwargs)
20 20
21 21
  22 +# QXXXQ
  23 +# These need manual handlers.
  24 +complex = set([
  25 + 'add-attachment',
  26 + 'copy-attachments-from',
  27 + 'encrypt',
  28 + 'overlay',
  29 + 'pages',
  30 + 'underlay',
  31 +])
  32 +
  33 +# QXXXQ
  34 +# These are trivial but not in main and so need a different config
  35 +# object. Some are in more than one table.
  36 +not_yet = set([
  37 + 'accessibility',
  38 + 'allow-insecure',
  39 + 'annotate',
  40 + 'assemble',
  41 + 'cleartext-metadata',
  42 + 'creationdate',
  43 + 'decode-level',
  44 + 'description',
  45 + 'extract',
  46 + 'filename',
  47 + 'force-R5',
  48 + 'force-V4',
  49 + 'form',
  50 + 'from',
  51 + 'job-json-file',
  52 + 'key',
  53 + 'mimetype',
  54 + 'moddate',
  55 + 'modify',
  56 + 'modify-other',
  57 + 'object-streams',
  58 + 'password',
  59 + 'password-file',
  60 + 'password-mode',
  61 + 'prefix',
  62 + 'print',
  63 + 'remove-unreferenced-resources',
  64 + 'repeat',
  65 + 'replace',
  66 + 'rotate',
  67 + 'show-object',
  68 + 'stream-data',
  69 + 'to',
  70 + 'use-aes',
  71 +])
  72 +
  73 +
22 class Main: 74 class Main:
23 SOURCES = [ 75 SOURCES = [
24 whoami, 76 whoami,
@@ -261,6 +313,53 @@ class Main: @@ -261,6 +313,53 @@ class Main:
261 self.update_hashes() 313 self.update_hashes()
262 # DON'T ADD CODE TO generate AFTER update_hashes 314 # DON'T ADD CODE TO generate AFTER update_hashes
263 315
  316 + def handle_trivial(self, i, identifier, config, kind, v):
  317 + # QXXXQ could potentially generate declarations for config
  318 + # methods separately by config object
  319 + if kind == 'bare':
  320 + self.init.append(f'this->ap.addBare("{i}", '
  321 + f'[this](){{{config}.{identifier}();}});')
  322 + elif kind == 'optional_parameter':
  323 + self.init.append(f'this->ap.addOptionalParameter("{i}", '
  324 + f'[this](char *x){{{config}.{identifier}(x);}});')
  325 + elif kind == 'required_parameter':
  326 + self.init.append(f'this->ap.addRequiredParameter("{i}", '
  327 + f'[this](char *x){{{config}.{identifier}(x);}}'
  328 + f', "{v}");')
  329 + elif kind == 'required_choices':
  330 + self.init.append(f'this->ap.addChoices("{i}", '
  331 + f'[this](char *x){{{config}.{identifier}(x);}}'
  332 + f', true, {v}_choices);')
  333 + elif kind == 'optional_choices':
  334 + self.init.append(f'this->ap.addChoices("{i}", '
  335 + f'[this](char *x){{{config}.{identifier}(x);}}'
  336 + f', false, {v}_choices);')
  337 +
  338 + def handle_flag(self, i, identifier, kind, v):
  339 + if kind == 'bare':
  340 + self.decls.append(f'void {identifier}();')
  341 + self.init.append(f'this->ap.addBare("{i}", '
  342 + f'b(&ArgParser::{identifier}));')
  343 + elif kind == 'optional_parameter':
  344 + self.decls.append(f'void {identifier}(char *);')
  345 + self.init.append(f'this->ap.addOptionalParameter("{i}", '
  346 + f'p(&ArgParser::{identifier}));')
  347 + elif kind == 'required_parameter':
  348 + self.decls.append(f'void {identifier}(char *);')
  349 + self.init.append(f'this->ap.addRequiredParameter("{i}", '
  350 + f'p(&ArgParser::{identifier})'
  351 + f', "{v}");')
  352 + elif kind == 'required_choices':
  353 + self.decls.append(f'void {identifier}(char *);')
  354 + self.init.append(f'this->ap.addChoices("{i}", '
  355 + f'p(&ArgParser::{identifier})'
  356 + f', true, {v}_choices);')
  357 + elif kind == 'optional_choices':
  358 + self.decls.append(f'void {identifier}(char *);')
  359 + self.init.append(f'this->ap.addChoices("{i}", '
  360 + f'p(&ArgParser::{identifier})'
  361 + f', false, {v}_choices);')
  362 +
264 def prepare(self, data): 363 def prepare(self, data):
265 self.decls = [] 364 self.decls = []
266 self.init = [] 365 self.init = []
@@ -306,6 +405,7 @@ class Main: @@ -306,6 +405,7 @@ class Main:
306 self.decls.append('') 405 self.decls.append('')
307 for o in data['options']: 406 for o in data['options']:
308 table = o['table'] 407 table = o['table']
  408 + config = o.get('config', None)
309 table_prefix = o.get('prefix', table) 409 table_prefix = o.get('prefix', table)
310 if table == 'main': 410 if table == 'main':
311 self.init.append('this->ap.selectMainOptionTable();') 411 self.init.append('this->ap.selectMainOptionTable();')
@@ -321,44 +421,31 @@ class Main: @@ -321,44 +421,31 @@ class Main:
321 self.decls.append(f'void {prefix}Positional(char*);') 421 self.decls.append(f'void {prefix}Positional(char*);')
322 self.init.append('this->ap.addPositional(' 422 self.init.append('this->ap.addPositional('
323 f'p(&ArgParser::{prefix}Positional));') 423 f'p(&ArgParser::{prefix}Positional));')
  424 + flags = {}
  425 +
324 for i in o.get('bare', []): 426 for i in o.get('bare', []):
325 - self.options_without_help.add(f'--{i}')  
326 - identifier = self.to_identifier(i, prefix, False)  
327 - self.decls.append(f'void {identifier}();')  
328 - self.init.append(f'this->ap.addBare("{i}", '  
329 - f'b(&ArgParser::{identifier}));')  
330 - add_jdata(i, table_prefix) 427 + flags[i] = ['bare', None]
331 for i in o.get('optional_parameter', []): 428 for i in o.get('optional_parameter', []):
332 - self.options_without_help.add(f'--{i}')  
333 - identifier = self.to_identifier(i, prefix, False)  
334 - self.decls.append(f'void {identifier}(char *);')  
335 - self.init.append(f'this->ap.addOptionalParameter("{i}", '  
336 - f'p(&ArgParser::{identifier}));')  
337 - add_jdata(i, table_prefix) 429 + flags[i] = ['optional_parameter', None]
338 for i, v in o.get('required_parameter', {}).items(): 430 for i, v in o.get('required_parameter', {}).items():
339 - self.options_without_help.add(f'--{i}')  
340 - identifier = self.to_identifier(i, prefix, False)  
341 - self.decls.append(f'void {identifier}(char *);')  
342 - self.init.append(f'this->ap.addRequiredParameter("{i}", '  
343 - f'p(&ArgParser::{identifier})'  
344 - f', "{v}");')  
345 - add_jdata(i, table_prefix) 431 + flags[i] = ['required_parameter', v]
346 for i, v in o.get('required_choices', {}).items(): 432 for i, v in o.get('required_choices', {}).items():
347 - self.options_without_help.add(f'--{i}')  
348 - identifier = self.to_identifier(i, prefix, False)  
349 - self.decls.append(f'void {identifier}(char *);')  
350 - self.init.append(f'this->ap.addChoices("{i}", '  
351 - f'p(&ArgParser::{identifier})'  
352 - f', true, {v}_choices);')  
353 - add_jdata(i, table_prefix) 433 + flags[i] = ['required_choices', v]
354 for i, v in o.get('optional_choices', {}).items(): 434 for i, v in o.get('optional_choices', {}).items():
  435 + flags[i] = ['optional_choices', v]
  436 + self.options_without_help.add(f'--{i}')
  437 +
  438 + for i, [kind, v] in flags.items():
355 self.options_without_help.add(f'--{i}') 439 self.options_without_help.add(f'--{i}')
356 - identifier = self.to_identifier(i, prefix, False)  
357 - self.decls.append(f'void {identifier}(char *);')  
358 - self.init.append(f'this->ap.addChoices("{i}", '  
359 - f'p(&ArgParser::{identifier})'  
360 - f', false, {v}_choices);')  
361 add_jdata(i, table_prefix) 440 add_jdata(i, table_prefix)
  441 + # QXXXQ complex, not_yet
  442 + if i in complex or i in not_yet or config is None:
  443 + identifier = self.to_identifier(i, prefix, False)
  444 + self.handle_flag(i, identifier, kind, v)
  445 + else:
  446 + identifier = self.to_identifier(i, '', False)
  447 + self.handle_trivial(i, identifier, config, kind, v)
  448 +
362 if table not in ('main', 'help'): 449 if table not in ('main', 'help'):
363 identifier = self.to_identifier(table, 'argEnd', False) 450 identifier = self.to_identifier(table, 'argEnd', False)
364 self.decls.append(f'void {identifier}();') 451 self.decls.append(f'void {identifier}();')
@@ -465,7 +552,7 @@ class Main: @@ -465,7 +552,7 @@ class Main:
465 ['choices', 'options', 'no-json', 'json'])) 552 ['choices', 'options', 'no-json', 'json']))
466 for o in data['options']: 553 for o in data['options']:
467 self.check_keys('top', o, set( 554 self.check_keys('top', o, set(
468 - ['table', 'prefix', 'bare', 'positional', 555 + ['table', 'prefix', 'config', 'bare', 'positional',
469 'optional_parameter', 'required_parameter', 556 'optional_parameter', 'required_parameter',
470 'required_choices', 'optional_choices', 'from_table'])) 557 'required_choices', 'optional_choices', 'from_table']))
471 558
include/qpdf/QPDFJob.hh
@@ -105,6 +105,7 @@ class QPDFJob @@ -105,6 +105,7 @@ class QPDFJob
105 { 105 {
106 friend class QPDFJob; 106 friend class QPDFJob;
107 public: 107 public:
  108 + // QXXXQ could potentially generate these declarations
108 QPDF_DLL Config& allowWeakCrypto(); 109 QPDF_DLL Config& allowWeakCrypto();
109 QPDF_DLL Config& check(); 110 QPDF_DLL Config& check();
110 QPDF_DLL Config& checkLinearization(); 111 QPDF_DLL Config& checkLinearization();
job.sums
1 # Generated by generate_auto_job 1 # Generated by generate_auto_job
2 -generate_auto_job 0758b244fc4e2d3e440883072d2740bc4cdb26c5aa8de938f028afd7d83fad79  
3 -job.yml 78d3b655abe70c0baaa31e51b74931f97084632bca5961fdbae89d7a57f34a67  
4 -libqpdf/qpdf/auto_job_decl.hh 9fda0ebd93bce6e308a3f26181293ad7b0d88a3503d4955cbf8e1db9a884d8ee 2 +generate_auto_job ea845318af6d4226761f7534c489e4abe0c5f4864b2fee10c8a16f11034b4d34
  3 +job.yml 2752b11028530f127b06e9731834dc3ae4c3b13d0161608e3b258cd2a79767d7
  4 +libqpdf/qpdf/auto_job_decl.hh db95ca0864e7495532095cd193be1ff0c15797b9ccaf252024c1154bae57b365
5 libqpdf/qpdf/auto_job_help.hh 383eea80e2c185ef5295fc126246457a7ceeffea759fdb90bb2e6727532ea538 5 libqpdf/qpdf/auto_job_help.hh 383eea80e2c185ef5295fc126246457a7ceeffea759fdb90bb2e6727532ea538
6 -libqpdf/qpdf/auto_job_init.hh a16e89fc7be3ca200d47391d949628a92113533135758068b944b64d0d54793d 6 +libqpdf/qpdf/auto_job_init.hh 864bb0a01df93bff129e7bc1723611d4e73f20ef7b0e33bd52261811eee43e2f
7 libqpdf/qpdf/auto_job_schema.hh c91a4e182e088797b70dda94af03ca32d360f3564890132da2a8bdc3c4432423 7 libqpdf/qpdf/auto_job_schema.hh c91a4e182e088797b70dda94af03ca32d360f3564890132da2a8bdc3c4432423
8 manual/_ext/qpdf.py 855fe12de5af7a10bb24be6ecc4d5dff4c84ac58cf388a13be6bbb394346a67d 8 manual/_ext/qpdf.py 855fe12de5af7a10bb24be6ecc4d5dff4c84ac58cf388a13be6bbb394346a67d
9 manual/cli.rst 68122ff8179c10df3fe6d577adde4973c346f7866ba9a511bab5a6e6f292a6f1 9 manual/cli.rst 68122ff8179c10df3fe6d577adde4973c346f7866ba9a511bab5a6e6f292a6f1
@@ -60,6 +60,7 @@ options: @@ -60,6 +60,7 @@ options:
60 - show-crypto 60 - show-crypto
61 - job-json-help 61 - job-json-help
62 - table: main 62 - table: main
  63 + config: jc
63 positional: true 64 positional: true
64 bare: 65 bare:
65 - add-attachment 66 - add-attachment
libqpdf/QPDFJob_argv.cc
@@ -216,20 +216,6 @@ ArgParser::argPasswordFile(char* parameter) @@ -216,20 +216,6 @@ ArgParser::argPasswordFile(char* parameter)
216 } 216 }
217 217
218 void 218 void
219 -ArgParser::argEmpty()  
220 -{  
221 - // QXXXQ @TRIVIAL  
222 - jc.empty();  
223 -}  
224 -  
225 -void  
226 -ArgParser::argLinearize()  
227 -{  
228 - // QXXXQ @TRIVIAL  
229 - jc.linearize();  
230 -}  
231 -  
232 -void  
233 ArgParser::argEncrypt() 219 ArgParser::argEncrypt()
234 { 220 {
235 this->accumulated_args.clear(); 221 this->accumulated_args.clear();
@@ -288,27 +274,6 @@ ArgParser::argEncPositional(char* arg) @@ -288,27 +274,6 @@ ArgParser::argEncPositional(char* arg)
288 } 274 }
289 275
290 void 276 void
291 -ArgParser::argDecrypt()  
292 -{  
293 - // QXXXQ @TRIVIAL  
294 - jc.decrypt();  
295 -}  
296 -  
297 -void  
298 -ArgParser::argPasswordIsHexKey()  
299 -{  
300 - // QXXXQ @TRIVIAL  
301 - jc.passwordIsHexKey();  
302 -}  
303 -  
304 -void  
305 -ArgParser::argSuppressPasswordRecovery()  
306 -{  
307 - // QXXXQ @TRIVIAL  
308 - jc.suppressPasswordRecovery();  
309 -}  
310 -  
311 -void  
312 ArgParser::argPasswordMode(char* parameter) 277 ArgParser::argPasswordMode(char* parameter)
313 { 278 {
314 if (strcmp(parameter, "bytes") == 0) 279 if (strcmp(parameter, "bytes") == 0)
@@ -340,34 +305,6 @@ ArgParser::argEnc256AllowInsecure() @@ -340,34 +305,6 @@ ArgParser::argEnc256AllowInsecure()
340 } 305 }
341 306
342 void 307 void
343 -ArgParser::argAllowWeakCrypto()  
344 -{  
345 - // QXXXQ @TRIVIAL  
346 - jc.allowWeakCrypto();  
347 -}  
348 -  
349 -void  
350 -ArgParser::argCopyEncryption(char* parameter)  
351 -{  
352 - // QXXXQ @TRIVIAL  
353 - jc.copyEncryption(parameter);  
354 -}  
355 -  
356 -void  
357 -ArgParser::argEncryptionFilePassword(char* parameter)  
358 -{  
359 - // QXXXQ @TRIVIAL  
360 - jc.encryptionFilePassword(parameter);  
361 -}  
362 -  
363 -void  
364 -ArgParser::argCollate(char* parameter)  
365 -{  
366 - // QXXXQ @TRIVIAL  
367 - jc.collate(parameter);  
368 -}  
369 -  
370 -void  
371 ArgParser::argPages() 308 ArgParser::argPages()
372 { 309 {
373 if (! o.page_specs.empty()) 310 if (! o.page_specs.empty())
@@ -505,34 +442,6 @@ ArgParser::argRotate(char* parameter) @@ -505,34 +442,6 @@ ArgParser::argRotate(char* parameter)
505 } 442 }
506 443
507 void 444 void
508 -ArgParser::argFlattenRotation()  
509 -{  
510 - // QXXXQ @TRIVIAL  
511 - jc.flattenRotation();  
512 -}  
513 -  
514 -void  
515 -ArgParser::argListAttachments()  
516 -{  
517 - // QXXXQ @TRIVIAL  
518 - jc.listAttachments();  
519 -}  
520 -  
521 -void  
522 -ArgParser::argShowAttachment(char* parameter)  
523 -{  
524 - // QXXXQ @TRIVIAL  
525 - jc.showAttachment(parameter);  
526 -}  
527 -  
528 -void  
529 -ArgParser::argRemoveAttachment(char* parameter)  
530 -{  
531 - // QXXXQ @TRIVIAL  
532 - jc.removeAttachment(parameter);  
533 -}  
534 -  
535 -void  
536 ArgParser::argAddAttachment() 445 ArgParser::argAddAttachment()
537 { 446 {
538 o.attachments_to_add.push_back(QPDFJob::AddAttachment()); 447 o.attachments_to_add.push_back(QPDFJob::AddAttachment());
@@ -571,27 +480,6 @@ ArgParser::argStreamData(char* parameter) @@ -571,27 +480,6 @@ ArgParser::argStreamData(char* parameter)
571 } 480 }
572 481
573 void 482 void
574 -ArgParser::argCompressStreams(char* parameter)  
575 -{  
576 - // QXXXQ @TRIVIAL  
577 - jc.compressStreams(parameter);  
578 -}  
579 -  
580 -void  
581 -ArgParser::argRecompressFlate()  
582 -{  
583 - // QXXXQ @TRIVIAL  
584 - jc.recompressFlate();  
585 -}  
586 -  
587 -void  
588 -ArgParser::argCompressionLevel(char* parameter)  
589 -{  
590 - // QXXXQ @TRIVIAL  
591 - jc.compressionLevel(parameter);  
592 -}  
593 -  
594 -void  
595 ArgParser::argDecodeLevel(char* parameter) 483 ArgParser::argDecodeLevel(char* parameter)
596 { 484 {
597 o.decode_level_set = true; 485 o.decode_level_set = true;
@@ -620,20 +508,6 @@ ArgParser::argDecodeLevel(char* parameter) @@ -620,20 +508,6 @@ ArgParser::argDecodeLevel(char* parameter)
620 } 508 }
621 509
622 void 510 void
623 -ArgParser::argNormalizeContent(char* parameter)  
624 -{  
625 - // QXXXQ @TRIVIAL  
626 - jc.normalizeContent(parameter);  
627 -}  
628 -  
629 -void  
630 -ArgParser::argSuppressRecovery()  
631 -{  
632 - // QXXXQ @TRIVIAL  
633 - jc.suppressRecovery();  
634 -}  
635 -  
636 -void  
637 ArgParser::argObjectStreams(char* parameter) 511 ArgParser::argObjectStreams(char* parameter)
638 { 512 {
639 o.object_stream_set = true; 513 o.object_stream_set = true;
@@ -658,34 +532,6 @@ ArgParser::argObjectStreams(char* parameter) @@ -658,34 +532,6 @@ ArgParser::argObjectStreams(char* parameter)
658 } 532 }
659 533
660 void 534 void
661 -ArgParser::argIgnoreXrefStreams()  
662 -{  
663 - // QXXXQ @TRIVIAL  
664 - jc.ignoreXrefStreams();  
665 -}  
666 -  
667 -void  
668 -ArgParser::argQdf()  
669 -{  
670 - // QXXXQ @TRIVIAL  
671 - jc.qdf();  
672 -}  
673 -  
674 -void  
675 -ArgParser::argPreserveUnreferenced()  
676 -{  
677 - // QXXXQ @TRIVIAL  
678 - jc.preserveUnreferenced();  
679 -}  
680 -  
681 -void  
682 -ArgParser::argPreserveUnreferencedResources()  
683 -{  
684 - // QXXXQ @TRIVIAL  
685 - jc.preserveUnreferencedResources();  
686 -}  
687 -  
688 -void  
689 ArgParser::argRemoveUnreferencedResources(char* parameter) 535 ArgParser::argRemoveUnreferencedResources(char* parameter)
690 { 536 {
691 if (strcmp(parameter, "auto") == 0) 537 if (strcmp(parameter, "auto") == 0)
@@ -709,167 +555,6 @@ ArgParser::argRemoveUnreferencedResources(char* parameter) @@ -709,167 +555,6 @@ ArgParser::argRemoveUnreferencedResources(char* parameter)
709 } 555 }
710 556
711 void 557 void
712 -ArgParser::argKeepFilesOpen(char* parameter)  
713 -{  
714 - // QXXXQ @TRIVIAL  
715 - jc.keepFilesOpen(parameter);  
716 -}  
717 -  
718 -void  
719 -ArgParser::argKeepFilesOpenThreshold(char* parameter)  
720 -{  
721 - // QXXXQ @TRIVIAL  
722 - jc.keepFilesOpenThreshold(parameter);  
723 -}  
724 -  
725 -void  
726 -ArgParser::argNewlineBeforeEndstream()  
727 -{  
728 - // QXXXQ @TRIVIAL  
729 - jc.newlineBeforeEndstream();  
730 -}  
731 -  
732 -void  
733 -ArgParser::argLinearizePass1(char* parameter)  
734 -{  
735 - // QXXXQ @TRIVIAL  
736 - jc.linearizePass1(parameter);  
737 -}  
738 -  
739 -void  
740 -ArgParser::argCoalesceContents()  
741 -{  
742 - // QXXXQ @TRIVIAL  
743 - jc.coalesceContents();  
744 -}  
745 -  
746 -void  
747 -ArgParser::argFlattenAnnotations(char* parameter)  
748 -{  
749 - // QXXXQ @TRIVIAL  
750 - jc.flattenAnnotations(parameter);  
751 -}  
752 -  
753 -void  
754 -ArgParser::argGenerateAppearances()  
755 -{  
756 - // QXXXQ @TRIVIAL  
757 - jc.generateAppearances();  
758 -}  
759 -  
760 -void  
761 -ArgParser::argMinVersion(char* parameter)  
762 -{  
763 - // QXXXQ @TRIVIAL  
764 - jc.minVersion(parameter);  
765 -}  
766 -  
767 -void  
768 -ArgParser::argForceVersion(char* parameter)  
769 -{  
770 - // QXXXQ @TRIVIAL  
771 - jc.forceVersion(parameter);  
772 -}  
773 -  
774 -void  
775 -ArgParser::argSplitPages(char* parameter)  
776 -{  
777 - // QXXXQ @TRIVIAL  
778 - jc.splitPages(parameter);  
779 -}  
780 -  
781 -void  
782 -ArgParser::argVerbose()  
783 -{  
784 - // QXXXQ @TRIVIAL  
785 - jc.verbose();  
786 -}  
787 -  
788 -void  
789 -ArgParser::argProgress()  
790 -{  
791 - // QXXXQ @TRIVIAL  
792 - jc.progress();  
793 -}  
794 -  
795 -void  
796 -ArgParser::argNoWarn()  
797 -{  
798 - // QXXXQ @TRIVIAL  
799 - jc.noWarn();  
800 -}  
801 -  
802 -void  
803 -ArgParser::argWarningExit0()  
804 -{  
805 - // QXXXQ @TRIVIAL  
806 - jc.warningExit0();  
807 -}  
808 -  
809 -void  
810 -ArgParser::argDeterministicId()  
811 -{  
812 - // QXXXQ @TRIVIAL  
813 - jc.deterministicId();  
814 -}  
815 -  
816 -void  
817 -ArgParser::argStaticId()  
818 -{  
819 - // QXXXQ @TRIVIAL  
820 - jc.staticId();  
821 -}  
822 -  
823 -void  
824 -ArgParser::argStaticAesIv()  
825 -{  
826 - // QXXXQ @TRIVIAL  
827 - jc.staticAesIv();  
828 -}  
829 -  
830 -void  
831 -ArgParser::argNoOriginalObjectIds()  
832 -{  
833 - // QXXXQ @TRIVIAL  
834 - jc.noOriginalObjectIds();  
835 -}  
836 -  
837 -void  
838 -ArgParser::argShowEncryption()  
839 -{  
840 - // QXXXQ @TRIVIAL  
841 - jc.showEncryption();  
842 -}  
843 -  
844 -void  
845 -ArgParser::argShowEncryptionKey()  
846 -{  
847 - // QXXXQ @TRIVIAL  
848 - jc.showEncryptionKey();  
849 -}  
850 -  
851 -void  
852 -ArgParser::argCheckLinearization()  
853 -{  
854 - // QXXXQ @TRIVIAL  
855 - jc.checkLinearization();  
856 -}  
857 -  
858 -void  
859 -ArgParser::argShowLinearization()  
860 -{  
861 - // QXXXQ @TRIVIAL  
862 - jc.showLinearization();  
863 -}  
864 -  
865 -void  
866 -ArgParser::argShowXref()  
867 -{  
868 - // QXXXQ @TRIVIAL  
869 - jc.showXref();  
870 -}  
871 -  
872 -void  
873 ArgParser::argShowObject(char* parameter) 558 ArgParser::argShowObject(char* parameter)
874 { 559 {
875 QPDFJob::parse_object_id(parameter, o.show_trailer, o.show_obj, o.show_gen); 560 QPDFJob::parse_object_id(parameter, o.show_trailer, o.show_obj, o.show_gen);
@@ -877,125 +562,6 @@ ArgParser::argShowObject(char* parameter) @@ -877,125 +562,6 @@ ArgParser::argShowObject(char* parameter)
877 } 562 }
878 563
879 void 564 void
880 -ArgParser::argRawStreamData()  
881 -{  
882 - // QXXXQ @TRIVIAL  
883 - jc.rawStreamData();  
884 -}  
885 -  
886 -void  
887 -ArgParser::argFilteredStreamData()  
888 -{  
889 - // QXXXQ @TRIVIAL  
890 - jc.filteredStreamData();  
891 -}  
892 -  
893 -void  
894 -ArgParser::argShowNpages()  
895 -{  
896 - // QXXXQ @TRIVIAL  
897 - jc.showNpages();  
898 -}  
899 -  
900 -void  
901 -ArgParser::argShowPages()  
902 -{  
903 - // QXXXQ @TRIVIAL  
904 - jc.showPages();  
905 -}  
906 -  
907 -void  
908 -ArgParser::argWithImages()  
909 -{  
910 - // QXXXQ @TRIVIAL  
911 - jc.withImages();  
912 -}  
913 -  
914 -void  
915 -ArgParser::argJson()  
916 -{  
917 - // QXXXQ @TRIVIAL  
918 - jc.json();  
919 -}  
920 -  
921 -void  
922 -ArgParser::argJsonKey(char* parameter)  
923 -{  
924 - // QXXXQ @TRIVIAL  
925 - jc.jsonKey(parameter);  
926 -}  
927 -  
928 -void  
929 -ArgParser::argJsonObject(char* parameter)  
930 -{  
931 - // QXXXQ @TRIVIAL  
932 - jc.jsonObject(parameter);  
933 -}  
934 -  
935 -void  
936 -ArgParser::argCheck()  
937 -{  
938 - // QXXXQ @TRIVIAL  
939 - jc.check();  
940 -}  
941 -  
942 -void  
943 -ArgParser::argOptimizeImages()  
944 -{  
945 - // QXXXQ @TRIVIAL  
946 - jc.optimizeImages();  
947 -}  
948 -  
949 -void  
950 -ArgParser::argExternalizeInlineImages()  
951 -{  
952 - // QXXXQ @TRIVIAL  
953 - jc.externalizeInlineImages();  
954 -}  
955 -  
956 -void  
957 -ArgParser::argKeepInlineImages()  
958 -{  
959 - // QXXXQ @TRIVIAL  
960 - jc.keepInlineImages();  
961 -}  
962 -  
963 -void  
964 -ArgParser::argRemovePageLabels()  
965 -{  
966 - // QXXXQ @TRIVIAL  
967 - jc.removePageLabels();  
968 -}  
969 -  
970 -void  
971 -ArgParser::argOiMinWidth(char* parameter)  
972 -{  
973 - // QXXXQ @TRIVIAL  
974 - jc.oiMinWidth(parameter);  
975 -}  
976 -  
977 -void  
978 -ArgParser::argOiMinHeight(char* parameter)  
979 -{  
980 - // QXXXQ @TRIVIAL  
981 - jc.oiMinHeight(parameter);  
982 -}  
983 -  
984 -void  
985 -ArgParser::argOiMinArea(char* parameter)  
986 -{  
987 - // QXXXQ @TRIVIAL  
988 - jc.oiMinArea(parameter);  
989 -}  
990 -  
991 -void  
992 -ArgParser::argIiMinBytes(char* parameter)  
993 -{  
994 - // QXXXQ @TRIVIAL  
995 - jc.iiMinBytes(parameter);  
996 -}  
997 -  
998 -void  
999 ArgParser::argEnc40Print(char* parameter) 565 ArgParser::argEnc40Print(char* parameter)
1000 { 566 {
1001 o.r2_print = (strcmp(parameter, "y") == 0); 567 o.r2_print = (strcmp(parameter, "y") == 0);
@@ -1227,27 +793,6 @@ ArgParser::argEndUnderlayOverlay() @@ -1227,27 +793,6 @@ ArgParser::argEndUnderlayOverlay()
1227 } 793 }
1228 794
1229 void 795 void
1230 -ArgParser::argReplaceInput()  
1231 -{  
1232 - // QXXXQ @TRIVIAL  
1233 - jc.replaceInput();  
1234 -}  
1235 -  
1236 -void  
1237 -ArgParser::argIsEncrypted()  
1238 -{  
1239 - // QXXXQ @TRIVIAL  
1240 - jc.isEncrypted();  
1241 -}  
1242 -  
1243 -void  
1244 -ArgParser::argRequiresPassword()  
1245 -{  
1246 - // QXXXQ @TRIVIAL  
1247 - jc.requiresPassword();  
1248 -}  
1249 -  
1250 -void  
1251 ArgParser::argAttPositional(char* arg) 796 ArgParser::argAttPositional(char* arg)
1252 { 797 {
1253 o.attachments_to_add.back().path = arg; 798 o.attachments_to_add.back().path = arg;
libqpdf/qpdf/auto_job_decl.hh
@@ -19,82 +19,17 @@ void argShowCrypto(); @@ -19,82 +19,17 @@ void argShowCrypto();
19 void argJobJsonHelp(); 19 void argJobJsonHelp();
20 void argPositional(char*); 20 void argPositional(char*);
21 void argAddAttachment(); 21 void argAddAttachment();
22 -void argAllowWeakCrypto();  
23 -void argCheck();  
24 -void argCheckLinearization();  
25 -void argCoalesceContents();  
26 void argCopyAttachmentsFrom(); 22 void argCopyAttachmentsFrom();
27 -void argDecrypt();  
28 -void argDeterministicId();  
29 -void argEmpty();  
30 void argEncrypt(); 23 void argEncrypt();
31 -void argExternalizeInlineImages();  
32 -void argFilteredStreamData();  
33 -void argFlattenRotation();  
34 -void argGenerateAppearances();  
35 -void argIgnoreXrefStreams();  
36 -void argIsEncrypted();  
37 -void argJson();  
38 -void argKeepInlineImages();  
39 -void argLinearize();  
40 -void argListAttachments();  
41 -void argNewlineBeforeEndstream();  
42 -void argNoOriginalObjectIds();  
43 -void argNoWarn();  
44 -void argOptimizeImages();  
45 void argOverlay(); 24 void argOverlay();
46 void argPages(); 25 void argPages();
47 -void argPasswordIsHexKey();  
48 -void argPreserveUnreferenced();  
49 -void argPreserveUnreferencedResources();  
50 -void argProgress();  
51 -void argQdf();  
52 -void argRawStreamData();  
53 -void argRecompressFlate();  
54 -void argRemovePageLabels();  
55 -void argReplaceInput();  
56 -void argRequiresPassword();  
57 -void argShowEncryption();  
58 -void argShowEncryptionKey();  
59 -void argShowLinearization();  
60 -void argShowNpages();  
61 -void argShowPages();  
62 -void argShowXref();  
63 -void argStaticAesIv();  
64 -void argStaticId();  
65 -void argSuppressPasswordRecovery();  
66 -void argSuppressRecovery();  
67 void argUnderlay(); 26 void argUnderlay();
68 -void argVerbose();  
69 -void argWarningExit0();  
70 -void argWithImages();  
71 -void argCollate(char *);  
72 -void argSplitPages(char *);  
73 -void argCompressionLevel(char *);  
74 -void argCopyEncryption(char *);  
75 -void argEncryptionFilePassword(char *);  
76 -void argForceVersion(char *);  
77 -void argIiMinBytes(char *);  
78 void argJobJsonFile(char *); 27 void argJobJsonFile(char *);
79 -void argJsonObject(char *);  
80 -void argKeepFilesOpenThreshold(char *);  
81 -void argLinearizePass1(char *);  
82 -void argMinVersion(char *);  
83 -void argOiMinArea(char *);  
84 -void argOiMinHeight(char *);  
85 -void argOiMinWidth(char *);  
86 void argPassword(char *); 28 void argPassword(char *);
87 void argPasswordFile(char *); 29 void argPasswordFile(char *);
88 -void argRemoveAttachment(char *);  
89 void argRotate(char *); 30 void argRotate(char *);
90 -void argShowAttachment(char *);  
91 void argShowObject(char *); 31 void argShowObject(char *);
92 -void argCompressStreams(char *);  
93 void argDecodeLevel(char *); 32 void argDecodeLevel(char *);
94 -void argFlattenAnnotations(char *);  
95 -void argJsonKey(char *);  
96 -void argKeepFilesOpen(char *);  
97 -void argNormalizeContent(char *);  
98 void argObjectStreams(char *); 33 void argObjectStreams(char *);
99 void argPasswordMode(char *); 34 void argPasswordMode(char *);
100 void argRemoveUnreferencedResources(char *); 35 void argRemoveUnreferencedResources(char *);
libqpdf/qpdf/auto_job_init.hh
@@ -30,82 +30,82 @@ this->ap.addBare("job-json-help", b(&ArgParser::argJobJsonHelp)); @@ -30,82 +30,82 @@ this->ap.addBare("job-json-help", b(&ArgParser::argJobJsonHelp));
30 this->ap.selectMainOptionTable(); 30 this->ap.selectMainOptionTable();
31 this->ap.addPositional(p(&ArgParser::argPositional)); 31 this->ap.addPositional(p(&ArgParser::argPositional));
32 this->ap.addBare("add-attachment", b(&ArgParser::argAddAttachment)); 32 this->ap.addBare("add-attachment", b(&ArgParser::argAddAttachment));
33 -this->ap.addBare("allow-weak-crypto", b(&ArgParser::argAllowWeakCrypto));  
34 -this->ap.addBare("check", b(&ArgParser::argCheck));  
35 -this->ap.addBare("check-linearization", b(&ArgParser::argCheckLinearization));  
36 -this->ap.addBare("coalesce-contents", b(&ArgParser::argCoalesceContents)); 33 +this->ap.addBare("allow-weak-crypto", [this](){jc.allowWeakCrypto();});
  34 +this->ap.addBare("check", [this](){jc.check();});
  35 +this->ap.addBare("check-linearization", [this](){jc.checkLinearization();});
  36 +this->ap.addBare("coalesce-contents", [this](){jc.coalesceContents();});
37 this->ap.addBare("copy-attachments-from", b(&ArgParser::argCopyAttachmentsFrom)); 37 this->ap.addBare("copy-attachments-from", b(&ArgParser::argCopyAttachmentsFrom));
38 -this->ap.addBare("decrypt", b(&ArgParser::argDecrypt));  
39 -this->ap.addBare("deterministic-id", b(&ArgParser::argDeterministicId));  
40 -this->ap.addBare("empty", b(&ArgParser::argEmpty)); 38 +this->ap.addBare("decrypt", [this](){jc.decrypt();});
  39 +this->ap.addBare("deterministic-id", [this](){jc.deterministicId();});
  40 +this->ap.addBare("empty", [this](){jc.empty();});
41 this->ap.addBare("encrypt", b(&ArgParser::argEncrypt)); 41 this->ap.addBare("encrypt", b(&ArgParser::argEncrypt));
42 -this->ap.addBare("externalize-inline-images", b(&ArgParser::argExternalizeInlineImages));  
43 -this->ap.addBare("filtered-stream-data", b(&ArgParser::argFilteredStreamData));  
44 -this->ap.addBare("flatten-rotation", b(&ArgParser::argFlattenRotation));  
45 -this->ap.addBare("generate-appearances", b(&ArgParser::argGenerateAppearances));  
46 -this->ap.addBare("ignore-xref-streams", b(&ArgParser::argIgnoreXrefStreams));  
47 -this->ap.addBare("is-encrypted", b(&ArgParser::argIsEncrypted));  
48 -this->ap.addBare("json", b(&ArgParser::argJson));  
49 -this->ap.addBare("keep-inline-images", b(&ArgParser::argKeepInlineImages));  
50 -this->ap.addBare("linearize", b(&ArgParser::argLinearize));  
51 -this->ap.addBare("list-attachments", b(&ArgParser::argListAttachments));  
52 -this->ap.addBare("newline-before-endstream", b(&ArgParser::argNewlineBeforeEndstream));  
53 -this->ap.addBare("no-original-object-ids", b(&ArgParser::argNoOriginalObjectIds));  
54 -this->ap.addBare("no-warn", b(&ArgParser::argNoWarn));  
55 -this->ap.addBare("optimize-images", b(&ArgParser::argOptimizeImages)); 42 +this->ap.addBare("externalize-inline-images", [this](){jc.externalizeInlineImages();});
  43 +this->ap.addBare("filtered-stream-data", [this](){jc.filteredStreamData();});
  44 +this->ap.addBare("flatten-rotation", [this](){jc.flattenRotation();});
  45 +this->ap.addBare("generate-appearances", [this](){jc.generateAppearances();});
  46 +this->ap.addBare("ignore-xref-streams", [this](){jc.ignoreXrefStreams();});
  47 +this->ap.addBare("is-encrypted", [this](){jc.isEncrypted();});
  48 +this->ap.addBare("json", [this](){jc.json();});
  49 +this->ap.addBare("keep-inline-images", [this](){jc.keepInlineImages();});
  50 +this->ap.addBare("linearize", [this](){jc.linearize();});
  51 +this->ap.addBare("list-attachments", [this](){jc.listAttachments();});
  52 +this->ap.addBare("newline-before-endstream", [this](){jc.newlineBeforeEndstream();});
  53 +this->ap.addBare("no-original-object-ids", [this](){jc.noOriginalObjectIds();});
  54 +this->ap.addBare("no-warn", [this](){jc.noWarn();});
  55 +this->ap.addBare("optimize-images", [this](){jc.optimizeImages();});
56 this->ap.addBare("overlay", b(&ArgParser::argOverlay)); 56 this->ap.addBare("overlay", b(&ArgParser::argOverlay));
57 this->ap.addBare("pages", b(&ArgParser::argPages)); 57 this->ap.addBare("pages", b(&ArgParser::argPages));
58 -this->ap.addBare("password-is-hex-key", b(&ArgParser::argPasswordIsHexKey));  
59 -this->ap.addBare("preserve-unreferenced", b(&ArgParser::argPreserveUnreferenced));  
60 -this->ap.addBare("preserve-unreferenced-resources", b(&ArgParser::argPreserveUnreferencedResources));  
61 -this->ap.addBare("progress", b(&ArgParser::argProgress));  
62 -this->ap.addBare("qdf", b(&ArgParser::argQdf));  
63 -this->ap.addBare("raw-stream-data", b(&ArgParser::argRawStreamData));  
64 -this->ap.addBare("recompress-flate", b(&ArgParser::argRecompressFlate));  
65 -this->ap.addBare("remove-page-labels", b(&ArgParser::argRemovePageLabels));  
66 -this->ap.addBare("replace-input", b(&ArgParser::argReplaceInput));  
67 -this->ap.addBare("requires-password", b(&ArgParser::argRequiresPassword));  
68 -this->ap.addBare("show-encryption", b(&ArgParser::argShowEncryption));  
69 -this->ap.addBare("show-encryption-key", b(&ArgParser::argShowEncryptionKey));  
70 -this->ap.addBare("show-linearization", b(&ArgParser::argShowLinearization));  
71 -this->ap.addBare("show-npages", b(&ArgParser::argShowNpages));  
72 -this->ap.addBare("show-pages", b(&ArgParser::argShowPages));  
73 -this->ap.addBare("show-xref", b(&ArgParser::argShowXref));  
74 -this->ap.addBare("static-aes-iv", b(&ArgParser::argStaticAesIv));  
75 -this->ap.addBare("static-id", b(&ArgParser::argStaticId));  
76 -this->ap.addBare("suppress-password-recovery", b(&ArgParser::argSuppressPasswordRecovery));  
77 -this->ap.addBare("suppress-recovery", b(&ArgParser::argSuppressRecovery)); 58 +this->ap.addBare("password-is-hex-key", [this](){jc.passwordIsHexKey();});
  59 +this->ap.addBare("preserve-unreferenced", [this](){jc.preserveUnreferenced();});
  60 +this->ap.addBare("preserve-unreferenced-resources", [this](){jc.preserveUnreferencedResources();});
  61 +this->ap.addBare("progress", [this](){jc.progress();});
  62 +this->ap.addBare("qdf", [this](){jc.qdf();});
  63 +this->ap.addBare("raw-stream-data", [this](){jc.rawStreamData();});
  64 +this->ap.addBare("recompress-flate", [this](){jc.recompressFlate();});
  65 +this->ap.addBare("remove-page-labels", [this](){jc.removePageLabels();});
  66 +this->ap.addBare("replace-input", [this](){jc.replaceInput();});
  67 +this->ap.addBare("requires-password", [this](){jc.requiresPassword();});
  68 +this->ap.addBare("show-encryption", [this](){jc.showEncryption();});
  69 +this->ap.addBare("show-encryption-key", [this](){jc.showEncryptionKey();});
  70 +this->ap.addBare("show-linearization", [this](){jc.showLinearization();});
  71 +this->ap.addBare("show-npages", [this](){jc.showNpages();});
  72 +this->ap.addBare("show-pages", [this](){jc.showPages();});
  73 +this->ap.addBare("show-xref", [this](){jc.showXref();});
  74 +this->ap.addBare("static-aes-iv", [this](){jc.staticAesIv();});
  75 +this->ap.addBare("static-id", [this](){jc.staticId();});
  76 +this->ap.addBare("suppress-password-recovery", [this](){jc.suppressPasswordRecovery();});
  77 +this->ap.addBare("suppress-recovery", [this](){jc.suppressRecovery();});
78 this->ap.addBare("underlay", b(&ArgParser::argUnderlay)); 78 this->ap.addBare("underlay", b(&ArgParser::argUnderlay));
79 -this->ap.addBare("verbose", b(&ArgParser::argVerbose));  
80 -this->ap.addBare("warning-exit-0", b(&ArgParser::argWarningExit0));  
81 -this->ap.addBare("with-images", b(&ArgParser::argWithImages));  
82 -this->ap.addOptionalParameter("collate", p(&ArgParser::argCollate));  
83 -this->ap.addOptionalParameter("split-pages", p(&ArgParser::argSplitPages));  
84 -this->ap.addRequiredParameter("compression-level", p(&ArgParser::argCompressionLevel), "level");  
85 -this->ap.addRequiredParameter("copy-encryption", p(&ArgParser::argCopyEncryption), "file");  
86 -this->ap.addRequiredParameter("encryption-file-password", p(&ArgParser::argEncryptionFilePassword), "password");  
87 -this->ap.addRequiredParameter("force-version", p(&ArgParser::argForceVersion), "version");  
88 -this->ap.addRequiredParameter("ii-min-bytes", p(&ArgParser::argIiMinBytes), "minimum"); 79 +this->ap.addBare("verbose", [this](){jc.verbose();});
  80 +this->ap.addBare("warning-exit-0", [this](){jc.warningExit0();});
  81 +this->ap.addBare("with-images", [this](){jc.withImages();});
  82 +this->ap.addOptionalParameter("collate", [this](char *x){jc.collate(x);});
  83 +this->ap.addOptionalParameter("split-pages", [this](char *x){jc.splitPages(x);});
  84 +this->ap.addRequiredParameter("compression-level", [this](char *x){jc.compressionLevel(x);}, "level");
  85 +this->ap.addRequiredParameter("copy-encryption", [this](char *x){jc.copyEncryption(x);}, "file");
  86 +this->ap.addRequiredParameter("encryption-file-password", [this](char *x){jc.encryptionFilePassword(x);}, "password");
  87 +this->ap.addRequiredParameter("force-version", [this](char *x){jc.forceVersion(x);}, "version");
  88 +this->ap.addRequiredParameter("ii-min-bytes", [this](char *x){jc.iiMinBytes(x);}, "minimum");
89 this->ap.addRequiredParameter("job-json-file", p(&ArgParser::argJobJsonFile), "file"); 89 this->ap.addRequiredParameter("job-json-file", p(&ArgParser::argJobJsonFile), "file");
90 -this->ap.addRequiredParameter("json-object", p(&ArgParser::argJsonObject), "trailer");  
91 -this->ap.addRequiredParameter("keep-files-open-threshold", p(&ArgParser::argKeepFilesOpenThreshold), "count");  
92 -this->ap.addRequiredParameter("linearize-pass1", p(&ArgParser::argLinearizePass1), "filename");  
93 -this->ap.addRequiredParameter("min-version", p(&ArgParser::argMinVersion), "version");  
94 -this->ap.addRequiredParameter("oi-min-area", p(&ArgParser::argOiMinArea), "minimum");  
95 -this->ap.addRequiredParameter("oi-min-height", p(&ArgParser::argOiMinHeight), "minimum");  
96 -this->ap.addRequiredParameter("oi-min-width", p(&ArgParser::argOiMinWidth), "minimum"); 90 +this->ap.addRequiredParameter("json-object", [this](char *x){jc.jsonObject(x);}, "trailer");
  91 +this->ap.addRequiredParameter("keep-files-open-threshold", [this](char *x){jc.keepFilesOpenThreshold(x);}, "count");
  92 +this->ap.addRequiredParameter("linearize-pass1", [this](char *x){jc.linearizePass1(x);}, "filename");
  93 +this->ap.addRequiredParameter("min-version", [this](char *x){jc.minVersion(x);}, "version");
  94 +this->ap.addRequiredParameter("oi-min-area", [this](char *x){jc.oiMinArea(x);}, "minimum");
  95 +this->ap.addRequiredParameter("oi-min-height", [this](char *x){jc.oiMinHeight(x);}, "minimum");
  96 +this->ap.addRequiredParameter("oi-min-width", [this](char *x){jc.oiMinWidth(x);}, "minimum");
97 this->ap.addRequiredParameter("password", p(&ArgParser::argPassword), "password"); 97 this->ap.addRequiredParameter("password", p(&ArgParser::argPassword), "password");
98 this->ap.addRequiredParameter("password-file", p(&ArgParser::argPasswordFile), "password"); 98 this->ap.addRequiredParameter("password-file", p(&ArgParser::argPasswordFile), "password");
99 -this->ap.addRequiredParameter("remove-attachment", p(&ArgParser::argRemoveAttachment), "attachment"); 99 +this->ap.addRequiredParameter("remove-attachment", [this](char *x){jc.removeAttachment(x);}, "attachment");
100 this->ap.addRequiredParameter("rotate", p(&ArgParser::argRotate), "[+|-]angle"); 100 this->ap.addRequiredParameter("rotate", p(&ArgParser::argRotate), "[+|-]angle");
101 -this->ap.addRequiredParameter("show-attachment", p(&ArgParser::argShowAttachment), "attachment"); 101 +this->ap.addRequiredParameter("show-attachment", [this](char *x){jc.showAttachment(x);}, "attachment");
102 this->ap.addRequiredParameter("show-object", p(&ArgParser::argShowObject), "trailer"); 102 this->ap.addRequiredParameter("show-object", p(&ArgParser::argShowObject), "trailer");
103 -this->ap.addChoices("compress-streams", p(&ArgParser::argCompressStreams), true, yn_choices); 103 +this->ap.addChoices("compress-streams", [this](char *x){jc.compressStreams(x);}, true, yn_choices);
104 this->ap.addChoices("decode-level", p(&ArgParser::argDecodeLevel), true, decode_level_choices); 104 this->ap.addChoices("decode-level", p(&ArgParser::argDecodeLevel), true, decode_level_choices);
105 -this->ap.addChoices("flatten-annotations", p(&ArgParser::argFlattenAnnotations), true, flatten_choices);  
106 -this->ap.addChoices("json-key", p(&ArgParser::argJsonKey), true, json_key_choices);  
107 -this->ap.addChoices("keep-files-open", p(&ArgParser::argKeepFilesOpen), true, yn_choices);  
108 -this->ap.addChoices("normalize-content", p(&ArgParser::argNormalizeContent), true, yn_choices); 105 +this->ap.addChoices("flatten-annotations", [this](char *x){jc.flattenAnnotations(x);}, true, flatten_choices);
  106 +this->ap.addChoices("json-key", [this](char *x){jc.jsonKey(x);}, true, json_key_choices);
  107 +this->ap.addChoices("keep-files-open", [this](char *x){jc.keepFilesOpen(x);}, true, yn_choices);
  108 +this->ap.addChoices("normalize-content", [this](char *x){jc.normalizeContent(x);}, true, yn_choices);
109 this->ap.addChoices("object-streams", p(&ArgParser::argObjectStreams), true, object_streams_choices); 109 this->ap.addChoices("object-streams", p(&ArgParser::argObjectStreams), true, object_streams_choices);
110 this->ap.addChoices("password-mode", p(&ArgParser::argPasswordMode), true, password_mode_choices); 110 this->ap.addChoices("password-mode", p(&ArgParser::argPasswordMode), true, password_mode_choices);
111 this->ap.addChoices("remove-unreferenced-resources", p(&ArgParser::argRemoveUnreferencedResources), true, remove_unref_choices); 111 this->ap.addChoices("remove-unreferenced-resources", p(&ArgParser::argRemoveUnreferencedResources), true, remove_unref_choices);