2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-31 01:10:51 +00:00

QPDFJob increment: generate handler declarations

This commit is contained in:
Jay Berkenbilt 2022-01-06 13:23:15 -05:00
parent 6e70d99b58
commit c3e9b64e7f
5 changed files with 270 additions and 237 deletions

View File

@ -93,8 +93,12 @@ class Main:
with open('job.yml', 'r') as f: with open('job.yml', 'r') as f:
data = yaml.safe_load(f.read()) data = yaml.safe_load(f.read())
self.validate(data) self.validate(data)
self.generate_decl(data) with open(self.DESTS['decl'], 'w') as f:
self.generate_init(data) print(BANNER, file=f)
self.generate_decl(data, f)
with open(self.DESTS['init'], 'w') as f:
print(BANNER, file=f)
self.generate_init(data, f)
# Update hashes last to ensure that this will be rerun in the # Update hashes last to ensure that this will be rerun in the
# event of a failure. # event of a failure.
@ -113,7 +117,7 @@ class Main:
self.check_keys('top', data, set(['choices', 'options'])) self.check_keys('top', data, set(['choices', 'options']))
for o in data['options']: for o in data['options']:
self.check_keys('top', o, set( self.check_keys('top', o, set(
['table', 'bare', 'positional', ['table', 'prefix', 'bare', 'positional',
'optional_parameter', 'required_parameter', 'optional_parameter', 'required_parameter',
'required_choices', 'from_table'])) 'required_choices', 'from_table']))
@ -123,28 +127,46 @@ class Main:
identifier = identifier.upper() identifier = identifier.upper()
else: else:
identifier = identifier.lower() identifier = identifier.lower()
identifier = re.sub('_([a-z])', lambda x: x.group(1).upper(), identifier = re.sub(r'(?:^|_)([a-z])',
identifier) lambda x: x.group(1).upper(),
identifier).replace('_', '')
return prefix + identifier return prefix + identifier
def generate_decl(self, data): def generate_decl(self, data, f):
with open(self.DESTS['decl'], 'w') as f: for o in data['options']:
print(BANNER, file=f) table = o['table']
for o in data['options']: if table in ('main', 'help'):
table = o['table'] continue
if table in ('main', 'help'): i = self.to_identifier(table, 'O_', True)
continue print(f'static constexpr char const* {i} = "{table}";', file=f)
i = self.to_identifier(table, 'O_', True) print('', file=f)
print(f'static constexpr char const* {i} = "{table}";', file=f) for o in data['options']:
table = o['table']
prefix = 'arg' + o.get('prefix', '')
if o.get('positional', False):
print(f'void {prefix}Positional(char*);', file=f)
for i in o.get('bare', []):
identifier = self.to_identifier(i, prefix, False)
print(f'void {identifier}();', file=f)
for i in o.get('optional_parameter', []):
identifier = self.to_identifier(i, prefix, False)
print(f'void {identifier}(char *);', file=f)
for i in o.get('required_parameter', {}):
identifier = self.to_identifier(i, prefix, False)
print(f'void {identifier}(char *);', file=f)
for i in o.get('required_choices', {}):
identifier = self.to_identifier(i, prefix, False)
print(f'void {identifier}(char *);', file=f)
if table not in ('main', 'help'):
identifier = self.to_identifier(table, 'argEnd', False)
print(f'void {identifier}();', file=f)
def generate_init(self, data): def generate_init(self, data, f):
with open(self.DESTS['init'], 'w') as f: for k, v in data['choices'].items():
print(BANNER, file=f) print(f'char const* {k}_choices[] = {{', file=f, end='')
for k, v in data['choices'].items(): for i in v:
print(f'char const* {k}_choices[] = {{', file=f, end='') print(f'"{i}", ', file=f, end='')
for i in v: print('0};', file=f)
print(f'"{i}", ', file=f, end='')
print('0};', file=f)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -1,5 +1,5 @@
# Generated by generate_auto_job # Generated by generate_auto_job
generate_auto_job 82410a924077d975acc27240f7b167cd32e1c358b8b2ea40161e607ee2ac0599 generate_auto_job 52a5e6bc70375e1183fedd5865ae4eae2a10be8d80edede1c48f9946be5d2538
job.yml 8c66b75eb06be65dfa40058a52cbc0bc18627a3aade5b3d4e034543605c93298 job.yml b4d230c46ca2b2e75b3b974e2d9ad21fb007eb5007d05cf249ae1e2cde81040c
libqpdf/qpdf/auto_job_decl.hh b098ee02ec853f47850b6421cc72b08c608f303f74f01d0b3ce3df52cecd5ffa libqpdf/qpdf/auto_job_decl.hh fca37543c1a2b7f675374e23b1ab34b30a7f5f2d843c53d4bc7e9a12bf4c3615
libqpdf/qpdf/auto_job_init.hh 0640167b8d550030c086851408b842e2a93c86577253d78f1b7d41d4ca695bd9 libqpdf/qpdf/auto_job_init.hh 0640167b8d550030c086851408b842e2a93c86577253d78f1b7d41d4ca695bd9

10
job.yml
View File

@ -143,18 +143,22 @@ options:
remove-unreferenced-resources: remove_unref remove-unreferenced-resources: remove_unref
stream-data: stream_data stream-data: stream_data
- table: pages - table: pages
prefix: Pages
positional: true positional: true
required_parameter: required_parameter:
- password: password password: password
- table: encryption - table: encryption
prefix: Enc
positional: true positional: true
- table: 40-bit encryption - table: 40-bit encryption
prefix: Enc40
required_choices: required_choices:
extract: yn extract: yn
annotate: yn annotate: yn
print: yn print: yn
modify: yn modify: yn
- table: 128-bit encryption - table: 128-bit encryption
prefix: Enc128
bare: bare:
- cleartext-metadata - cleartext-metadata
- force-V4 - force-V4
@ -169,6 +173,7 @@ options:
modify: modify128_choices modify: modify128_choices
use-aes: yn use-aes: yn
- table: 256-bit encryption - table: 256-bit encryption
prefix: Enc256
from_table: from_table:
table: 128-bit encryption table: 128-bit encryption
options: options:
@ -185,6 +190,7 @@ options:
- force-R5 - force-R5
- allow-insecure - allow-insecure
- table: underlay/overlay - table: underlay/overlay
prefix: UO
positional: true positional: true
required_parameter: required_parameter:
to: page-range to: page-range
@ -192,6 +198,7 @@ options:
repeat: page-range repeat: page-range
password: password password: password
- table: attachment - table: attachment
prefix: Att
positional: true positional: true
bare: bare:
- replace - replace
@ -203,6 +210,7 @@ options:
mimetype: mime/type mimetype: mime/type
description: description description: description
- table: copy attachment - table: copy attachment
prefix: CopyAtt
positional: true positional: true
required_parameter: required_parameter:
prefix: prefix prefix: prefix

View File

@ -25,134 +25,6 @@ namespace
private: private:
# include <qpdf/auto_job_decl.hh> # include <qpdf/auto_job_decl.hh>
void argHelp();
void argVersion();
void argCopyright();
void argJsonHelp();
void argShowCrypto();
void argPositional(char* arg);
void argPassword(char* parameter);
void argPasswordFile(char* parameter);
void argEmpty();
void argLinearize();
void argEncrypt();
void argDecrypt();
void argPasswordIsHexKey();
void argAllowInsecure();
void argAllowWeakCrypto();
void argPasswordMode(char* parameter);
void argSuppressPasswordRecovery();
void argCopyEncryption(char* parameter);
void argEncryptionFilePassword(char* parameter);
void argPages();
void argPagesPassword(char* parameter);
void argPagesPositional(char* parameter);
void argEndPages();
void argUnderlay();
void argOverlay();
void argRotate(char* parameter);
void argCollate(char* parameter);
void argFlattenRotation();
void argListAttachments();
void argShowAttachment(char* parameter);
void argRemoveAttachment(char* parameter);
void argAddAttachment();
void argCopyAttachments();
void argStreamData(char* parameter);
void argCompressStreams(char* parameter);
void argRecompressFlate();
void argCompressionLevel(char* parameter);
void argDecodeLevel(char* parameter);
void argNormalizeContent(char* parameter);
void argSuppressRecovery();
void argObjectStreams(char* parameter);
void argIgnoreXrefStreams();
void argQdf();
void argPreserveUnreferenced();
void argPreserveUnreferencedResources();
void argRemoveUnreferencedResources(char* parameter);
void argKeepFilesOpen(char* parameter);
void argKeepFilesOpenThreshold(char* parameter);
void argNewlineBeforeEndstream();
void argLinearizePass1(char* parameter);
void argCoalesceContents();
void argFlattenAnnotations(char* parameter);
void argGenerateAppearances();
void argMinVersion(char* parameter);
void argForceVersion(char* parameter);
void argSplitPages(char* parameter);
void argVerbose();
void argProgress();
void argNoWarn();
void argWarningExitZero();
void argDeterministicId();
void argStaticId();
void argStaticAesIv();
void argNoOriginalObjectIds();
void argShowEncryption();
void argShowEncryptionKey();
void argCheckLinearization();
void argShowLinearization();
void argShowXref();
void argShowObject(char* parameter);
void argRawStreamData();
void argFilteredStreamData();
void argShowNpages();
void argShowPages();
void argWithImages();
void argJson();
void argJsonKey(char* parameter);
void argJsonObject(char* parameter);
void argCheck();
void argOptimizeImages();
void argExternalizeInlineImages();
void argKeepInlineImages();
void argRemovePageLabels();
void argOiMinWidth(char* parameter);
void argOiMinHeight(char* parameter);
void argOiMinArea(char* parameter);
void argIiMinBytes(char* parameter);
void arg40Print(char* parameter);
void arg40Modify(char* parameter);
void arg40Extract(char* parameter);
void arg40Annotate(char* parameter);
void arg128Accessibility(char* parameter);
void arg128Extract(char* parameter);
void arg128Print(char* parameter);
void arg128Modify(char* parameter);
void arg128ClearTextMetadata();
void arg128Assemble(char* parameter);
void arg128Annotate(char* parameter);
void arg128Form(char* parameter);
void arg128ModOther(char* parameter);
void arg128UseAes(char* parameter);
void arg128ForceV4();
void arg256ForceR5();
void argEncryptPositional(char* arg);
void argEndEncrypt();
void argUOpositional(char* arg);
void argUOto(char* parameter);
void argUOfrom(char* parameter);
void argUOrepeat(char* parameter);
void argUOpassword(char* parameter);
void argEndUnderOverlay();
void argReplaceInput();
void argIsEncrypted();
void argRequiresPassword();
void argAApositional(char* arg);
void argAAKey(char* parameter);
void argAAFilename(char* parameter);
void argAACreationDate(char* parameter);
void argAAModDate(char* parameter);
void argAAMimeType(char* parameter);
void argAADescription(char* parameter);
void argAAReplace();
void argEndAddAttachment();
void argCApositional(char* arg);
void argCAprefix(char* parameter);
void argCApassword(char* parameter);
void argEndCopyAttachments();
void usage(std::string const& message); void usage(std::string const& message);
void initOptionTable(); void initOptionTable();
void doFinalChecks(); void doFinalChecks();
@ -226,7 +98,7 @@ ArgParser::initOptionTable()
p(&ArgParser::argRemoveAttachment), "attachment-key"); p(&ArgParser::argRemoveAttachment), "attachment-key");
this->ap.addBare("add-attachment", b(&ArgParser::argAddAttachment)); this->ap.addBare("add-attachment", b(&ArgParser::argAddAttachment));
this->ap.addBare( this->ap.addBare(
"copy-attachments-from", b(&ArgParser::argCopyAttachments)); "copy-attachments-from", b(&ArgParser::argCopyAttachmentsFrom));
this->ap.addRequiredChoices("stream-data", this->ap.addRequiredChoices("stream-data",
p(&ArgParser::argStreamData), stream_data_choices); p(&ArgParser::argStreamData), stream_data_choices);
this->ap.addRequiredChoices("compress-streams", this->ap.addRequiredChoices("compress-streams",
@ -270,7 +142,7 @@ ArgParser::initOptionTable()
this->ap.addBare("verbose", b(&ArgParser::argVerbose)); this->ap.addBare("verbose", b(&ArgParser::argVerbose));
this->ap.addBare("progress", b(&ArgParser::argProgress)); this->ap.addBare("progress", b(&ArgParser::argProgress));
this->ap.addBare("no-warn", b(&ArgParser::argNoWarn)); this->ap.addBare("no-warn", b(&ArgParser::argNoWarn));
this->ap.addBare("warning-exit-0", b(&ArgParser::argWarningExitZero)); this->ap.addBare("warning-exit-0", b(&ArgParser::argWarningExit0));
this->ap.addBare("deterministic-id", b(&ArgParser::argDeterministicId)); this->ap.addBare("deterministic-id", b(&ArgParser::argDeterministicId));
this->ap.addBare("static-id", b(&ArgParser::argStaticId)); this->ap.addBare("static-id", b(&ArgParser::argStaticId));
this->ap.addBare("static-aes-iv", b(&ArgParser::argStaticAesIv)); this->ap.addBare("static-aes-iv", b(&ArgParser::argStaticAesIv));
@ -321,73 +193,73 @@ ArgParser::initOptionTable()
this->ap.selectMainOptionTable(); this->ap.selectMainOptionTable();
this->ap.addBare("encrypt", b(&ArgParser::argEncrypt)); this->ap.addBare("encrypt", b(&ArgParser::argEncrypt));
this->ap.registerOptionTable(O_ENCRYPTION, b(&ArgParser::argEndEncrypt)); this->ap.registerOptionTable(O_ENCRYPTION, b(&ArgParser::argEndEncryption));
this->ap.addPositional(p(&ArgParser::argEncryptPositional)); this->ap.addPositional(p(&ArgParser::argEncPositional));
this->ap.registerOptionTable(O_40_BIT_ENCRYPTION, b(&ArgParser::argEndEncrypt)); this->ap.registerOptionTable(O_40_BIT_ENCRYPTION, b(&ArgParser::argEndEncryption));
this->ap.addRequiredChoices("extract",p(&ArgParser::arg40Extract), yn_choices); this->ap.addRequiredChoices("extract",p(&ArgParser::argEnc40Extract), yn_choices);
this->ap.addRequiredChoices("annotate",p(&ArgParser::arg40Annotate), yn_choices); this->ap.addRequiredChoices("annotate",p(&ArgParser::argEnc40Annotate), yn_choices);
this->ap.addRequiredChoices("print",p(&ArgParser::arg40Print), yn_choices); this->ap.addRequiredChoices("print",p(&ArgParser::argEnc40Print), yn_choices);
this->ap.addRequiredChoices("modify",p(&ArgParser::arg40Modify), yn_choices); this->ap.addRequiredChoices("modify",p(&ArgParser::argEnc40Modify), yn_choices);
this->ap.registerOptionTable(O_128_BIT_ENCRYPTION, b(&ArgParser::argEndEncrypt)); this->ap.registerOptionTable(O_128_BIT_ENCRYPTION, b(&ArgParser::argEndEncryption));
this->ap.registerOptionTable(O_256_BIT_ENCRYPTION, b(&ArgParser::argEndEncrypt)); this->ap.registerOptionTable(O_256_BIT_ENCRYPTION, b(&ArgParser::argEndEncryption));
for (char const* k: {O_128_BIT_ENCRYPTION, O_256_BIT_ENCRYPTION}) for (char const* k: {O_128_BIT_ENCRYPTION, O_256_BIT_ENCRYPTION})
{ {
this->ap.selectOptionTable(k); this->ap.selectOptionTable(k);
this->ap.addRequiredChoices("accessibility", this->ap.addRequiredChoices("accessibility",
p(&ArgParser::arg128Accessibility), yn_choices); p(&ArgParser::argEnc128Accessibility), yn_choices);
this->ap.addRequiredChoices("extract", p(&ArgParser::arg128Extract), yn_choices); this->ap.addRequiredChoices("extract", p(&ArgParser::argEnc128Extract), yn_choices);
this->ap.addRequiredChoices("print", this->ap.addRequiredChoices("print",
p(&ArgParser::arg128Print), print128_choices); p(&ArgParser::argEnc128Print), print128_choices);
this->ap.addRequiredChoices("assemble",p(&ArgParser::arg128Assemble), yn_choices); this->ap.addRequiredChoices("assemble",p(&ArgParser::argEnc128Assemble), yn_choices);
this->ap.addRequiredChoices("annotate",p(&ArgParser::arg128Annotate), yn_choices); this->ap.addRequiredChoices("annotate",p(&ArgParser::argEnc128Annotate), yn_choices);
this->ap.addRequiredChoices("form",p(&ArgParser::arg128Form), yn_choices); this->ap.addRequiredChoices("form",p(&ArgParser::argEnc128Form), yn_choices);
this->ap.addRequiredChoices("modify-other",p(&ArgParser::arg128ModOther), yn_choices); this->ap.addRequiredChoices("modify-other",p(&ArgParser::argEnc128ModifyOther), yn_choices);
this->ap.addRequiredChoices("modify", this->ap.addRequiredChoices("modify",
p(&ArgParser::arg128Modify), modify128_choices); p(&ArgParser::argEnc128Modify), modify128_choices);
this->ap.addBare("cleartext-metadata", b(&ArgParser::arg128ClearTextMetadata)); this->ap.addBare("cleartext-metadata", b(&ArgParser::argEnc128CleartextMetadata));
} }
this->ap.selectOptionTable(O_128_BIT_ENCRYPTION); this->ap.selectOptionTable(O_128_BIT_ENCRYPTION);
this->ap.addRequiredChoices("use-aes",p(&ArgParser::arg128UseAes), yn_choices); this->ap.addRequiredChoices("use-aes",p(&ArgParser::argEnc128UseAes), yn_choices);
this->ap.addBare("force-V4", b(&ArgParser::arg128ForceV4)); this->ap.addBare("force-V4", b(&ArgParser::argEnc128ForceV4));
this->ap.selectOptionTable(O_256_BIT_ENCRYPTION); this->ap.selectOptionTable(O_256_BIT_ENCRYPTION);
this->ap.addBare("force-R5", b(&ArgParser::arg256ForceR5)); this->ap.addBare("force-R5", b(&ArgParser::argEnc256ForceR5));
this->ap.addBare("allow-insecure", b(&ArgParser::argAllowInsecure)); this->ap.addBare("allow-insecure", b(&ArgParser::argEnc256AllowInsecure));
this->ap.registerOptionTable(O_UNDERLAY_OVERLAY, b(&ArgParser::argEndUnderOverlay)); this->ap.registerOptionTable(O_UNDERLAY_OVERLAY, b(&ArgParser::argEndUnderlayOverlay));
this->ap.addPositional(p(&ArgParser::argUOpositional)); this->ap.addPositional(p(&ArgParser::argUOPositional));
this->ap.addRequiredParameter("to", this->ap.addRequiredParameter("to",
p(&ArgParser::argUOto), "page-range"); p(&ArgParser::argUOTo), "page-range");
this->ap.addRequiredParameter("from", this->ap.addRequiredParameter("from",
p(&ArgParser::argUOfrom), "page-range"); p(&ArgParser::argUOFrom), "page-range");
this->ap.addRequiredParameter("repeat", this->ap.addRequiredParameter("repeat",
p(&ArgParser::argUOrepeat), "page-range"); p(&ArgParser::argUORepeat), "page-range");
this->ap.addRequiredParameter("password", this->ap.addRequiredParameter("password",
p(&ArgParser::argUOpassword), "password"); p(&ArgParser::argUOPassword), "password");
this->ap.registerOptionTable(O_ATTACHMENT, b(&ArgParser::argEndAddAttachment)); this->ap.registerOptionTable(O_ATTACHMENT, b(&ArgParser::argEndAttachment));
this->ap.addPositional(p(&ArgParser::argAApositional)); this->ap.addPositional(p(&ArgParser::argAttPositional));
this->ap.addRequiredParameter("key", this->ap.addRequiredParameter("key",
p(&ArgParser::argAAKey), "attachment-key"); p(&ArgParser::argAttKey), "attachment-key");
this->ap.addRequiredParameter("filename", this->ap.addRequiredParameter("filename",
p(&ArgParser::argAAFilename), "filename"); p(&ArgParser::argAttFilename), "filename");
this->ap.addRequiredParameter("creationdate", this->ap.addRequiredParameter("creationdate",
p(&ArgParser::argAACreationDate), "creation-date"); p(&ArgParser::argAttCreationdate), "creation-date");
this->ap.addRequiredParameter("moddate", this->ap.addRequiredParameter("moddate",
p(&ArgParser::argAAModDate), "modification-date"); p(&ArgParser::argAttModdate), "modification-date");
this->ap.addRequiredParameter("mimetype", this->ap.addRequiredParameter("mimetype",
p(&ArgParser::argAAMimeType), "mime/type"); p(&ArgParser::argAttMimetype), "mime/type");
this->ap.addRequiredParameter("description", this->ap.addRequiredParameter("description",
p(&ArgParser::argAADescription), "description"); p(&ArgParser::argAttDescription), "description");
this->ap.addBare("replace", b(&ArgParser::argAAReplace)); this->ap.addBare("replace", b(&ArgParser::argAttReplace));
this->ap.registerOptionTable(O_COPY_ATTACHMENT, b(&ArgParser::argEndCopyAttachments)); this->ap.registerOptionTable(O_COPY_ATTACHMENT, b(&ArgParser::argEndCopyAttachment));
this->ap.addPositional(p(&ArgParser::argCApositional)); this->ap.addPositional(p(&ArgParser::argCopyAttPositional));
this->ap.addRequiredParameter("prefix", this->ap.addRequiredParameter("prefix",
p(&ArgParser::argCAprefix), "prefix"); p(&ArgParser::argCopyAttPrefix), "prefix");
this->ap.addRequiredParameter("password", this->ap.addRequiredParameter("password",
p(&ArgParser::argCApassword), "password"); p(&ArgParser::argCopyAttPassword), "password");
} }
void void
@ -1067,7 +939,7 @@ ArgParser::argEncrypt()
} }
void void
ArgParser::argEncryptPositional(char* arg) ArgParser::argEncPositional(char* arg)
{ {
this->accumulated_args.push_back(arg); this->accumulated_args.push_back(arg);
size_t n_args = this->accumulated_args.size(); size_t n_args = this->accumulated_args.size();
@ -1159,7 +1031,7 @@ ArgParser::argPasswordMode(char* parameter)
} }
void void
ArgParser::argAllowInsecure() ArgParser::argEnc256AllowInsecure()
{ {
o.allow_insecure = true; o.allow_insecure = true;
} }
@ -1364,7 +1236,7 @@ ArgParser::argAddAttachment()
} }
void void
ArgParser::argCopyAttachments() ArgParser::argCopyAttachmentsFrom()
{ {
o.attachments_to_copy.push_back(QPDFJob::CopyAttachmentFrom()); o.attachments_to_copy.push_back(QPDFJob::CopyAttachmentFrom());
this->ap.selectOptionTable(O_COPY_ATTACHMENT); this->ap.selectOptionTable(O_COPY_ATTACHMENT);
@ -1616,7 +1488,7 @@ ArgParser::argNoWarn()
} }
void void
ArgParser::argWarningExitZero() ArgParser::argWarningExit0()
{ {
o.warnings_exit_zero = true; o.warnings_exit_zero = true;
} }
@ -1793,43 +1665,43 @@ ArgParser::argIiMinBytes(char* parameter)
} }
void void
ArgParser::arg40Print(char* parameter) ArgParser::argEnc40Print(char* parameter)
{ {
o.r2_print = (strcmp(parameter, "y") == 0); o.r2_print = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg40Modify(char* parameter) ArgParser::argEnc40Modify(char* parameter)
{ {
o.r2_modify = (strcmp(parameter, "y") == 0); o.r2_modify = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg40Extract(char* parameter) ArgParser::argEnc40Extract(char* parameter)
{ {
o.r2_extract = (strcmp(parameter, "y") == 0); o.r2_extract = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg40Annotate(char* parameter) ArgParser::argEnc40Annotate(char* parameter)
{ {
o.r2_annotate = (strcmp(parameter, "y") == 0); o.r2_annotate = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128Accessibility(char* parameter) ArgParser::argEnc128Accessibility(char* parameter)
{ {
o.r3_accessibility = (strcmp(parameter, "y") == 0); o.r3_accessibility = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128Extract(char* parameter) ArgParser::argEnc128Extract(char* parameter)
{ {
o.r3_extract = (strcmp(parameter, "y") == 0); o.r3_extract = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128Print(char* parameter) ArgParser::argEnc128Print(char* parameter)
{ {
if (strcmp(parameter, "full") == 0) if (strcmp(parameter, "full") == 0)
{ {
@ -1850,7 +1722,7 @@ ArgParser::arg128Print(char* parameter)
} }
void void
ArgParser::arg128Modify(char* parameter) ArgParser::argEnc128Modify(char* parameter)
{ {
if (strcmp(parameter, "all") == 0) if (strcmp(parameter, "all") == 0)
{ {
@ -1894,55 +1766,55 @@ ArgParser::arg128Modify(char* parameter)
} }
void void
ArgParser::arg128ClearTextMetadata() ArgParser::argEnc128CleartextMetadata()
{ {
o.cleartext_metadata = true; o.cleartext_metadata = true;
} }
void void
ArgParser::arg128Assemble(char* parameter) ArgParser::argEnc128Assemble(char* parameter)
{ {
o.r3_assemble = (strcmp(parameter, "y") == 0); o.r3_assemble = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128Annotate(char* parameter) ArgParser::argEnc128Annotate(char* parameter)
{ {
o.r3_annotate_and_form = (strcmp(parameter, "y") == 0); o.r3_annotate_and_form = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128Form(char* parameter) ArgParser::argEnc128Form(char* parameter)
{ {
o.r3_form_filling = (strcmp(parameter, "y") == 0); o.r3_form_filling = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128ModOther(char* parameter) ArgParser::argEnc128ModifyOther(char* parameter)
{ {
o.r3_modify_other = (strcmp(parameter, "y") == 0); o.r3_modify_other = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128UseAes(char* parameter) ArgParser::argEnc128UseAes(char* parameter)
{ {
o.use_aes = (strcmp(parameter, "y") == 0); o.use_aes = (strcmp(parameter, "y") == 0);
} }
void void
ArgParser::arg128ForceV4() ArgParser::argEnc128ForceV4()
{ {
o.force_V4 = true; o.force_V4 = true;
} }
void void
ArgParser::arg256ForceR5() ArgParser::argEnc256ForceR5()
{ {
o.force_R5 = true; o.force_R5 = true;
} }
void void
ArgParser::argEndEncrypt() ArgParser::argEndEncryption()
{ {
o.encrypt = true; o.encrypt = true;
o.decrypt = false; o.decrypt = false;
@ -1950,7 +1822,7 @@ ArgParser::argEndEncrypt()
} }
void void
ArgParser::argUOpositional(char* arg) ArgParser::argUOPositional(char* arg)
{ {
if (o.under_overlay->filename) if (o.under_overlay->filename)
{ {
@ -1963,14 +1835,14 @@ ArgParser::argUOpositional(char* arg)
} }
void void
ArgParser::argUOto(char* parameter) ArgParser::argUOTo(char* parameter)
{ {
parseNumrange(parameter, 0); parseNumrange(parameter, 0);
o.under_overlay->to_nr = parameter; o.under_overlay->to_nr = parameter;
} }
void void
ArgParser::argUOfrom(char* parameter) ArgParser::argUOFrom(char* parameter)
{ {
if (strlen(parameter)) if (strlen(parameter))
{ {
@ -1980,7 +1852,7 @@ ArgParser::argUOfrom(char* parameter)
} }
void void
ArgParser::argUOrepeat(char* parameter) ArgParser::argUORepeat(char* parameter)
{ {
if (strlen(parameter)) if (strlen(parameter))
{ {
@ -1990,13 +1862,13 @@ ArgParser::argUOrepeat(char* parameter)
} }
void void
ArgParser::argUOpassword(char* parameter) ArgParser::argUOPassword(char* parameter)
{ {
o.under_overlay->password = parameter; o.under_overlay->password = parameter;
} }
void void
ArgParser::argEndUnderOverlay() ArgParser::argEndUnderlayOverlay()
{ {
if (0 == o.under_overlay->filename) if (0 == o.under_overlay->filename)
{ {
@ -2026,25 +1898,25 @@ ArgParser::argRequiresPassword()
} }
void void
ArgParser::argAApositional(char* arg) ArgParser::argAttPositional(char* arg)
{ {
o.attachments_to_add.back().path = arg; o.attachments_to_add.back().path = arg;
} }
void void
ArgParser::argAAKey(char* parameter) ArgParser::argAttKey(char* parameter)
{ {
o.attachments_to_add.back().key = parameter; o.attachments_to_add.back().key = parameter;
} }
void void
ArgParser::argAAFilename(char* parameter) ArgParser::argAttFilename(char* parameter)
{ {
o.attachments_to_add.back().filename = parameter; o.attachments_to_add.back().filename = parameter;
} }
void void
ArgParser::argAACreationDate(char* parameter) ArgParser::argAttCreationdate(char* parameter)
{ {
if (! QUtil::pdf_time_to_qpdf_time(parameter)) if (! QUtil::pdf_time_to_qpdf_time(parameter))
{ {
@ -2054,7 +1926,7 @@ ArgParser::argAACreationDate(char* parameter)
} }
void void
ArgParser::argAAModDate(char* parameter) ArgParser::argAttModdate(char* parameter)
{ {
if (! QUtil::pdf_time_to_qpdf_time(parameter)) if (! QUtil::pdf_time_to_qpdf_time(parameter))
{ {
@ -2064,7 +1936,7 @@ ArgParser::argAAModDate(char* parameter)
} }
void void
ArgParser::argAAMimeType(char* parameter) ArgParser::argAttMimetype(char* parameter)
{ {
if (strchr(parameter, '/') == nullptr) if (strchr(parameter, '/') == nullptr)
{ {
@ -2074,19 +1946,19 @@ ArgParser::argAAMimeType(char* parameter)
} }
void void
ArgParser::argAADescription(char* parameter) ArgParser::argAttDescription(char* parameter)
{ {
o.attachments_to_add.back().description = parameter; o.attachments_to_add.back().description = parameter;
} }
void void
ArgParser::argAAReplace() ArgParser::argAttReplace()
{ {
o.attachments_to_add.back().replace = true; o.attachments_to_add.back().replace = true;
} }
void void
ArgParser::argEndAddAttachment() ArgParser::argEndAttachment()
{ {
static std::string now = QUtil::qpdf_time_to_pdf_time( static std::string now = QUtil::qpdf_time_to_pdf_time(
QUtil::get_current_qpdf_time()); QUtil::get_current_qpdf_time());
@ -2119,25 +1991,25 @@ ArgParser::argEndAddAttachment()
} }
void void
ArgParser::argCApositional(char* arg) ArgParser::argCopyAttPositional(char* arg)
{ {
o.attachments_to_copy.back().path = arg; o.attachments_to_copy.back().path = arg;
} }
void void
ArgParser::argCAprefix(char* parameter) ArgParser::argCopyAttPrefix(char* parameter)
{ {
o.attachments_to_copy.back().prefix = parameter; o.attachments_to_copy.back().prefix = parameter;
} }
void void
ArgParser::argCApassword(char* parameter) ArgParser::argCopyAttPassword(char* parameter)
{ {
o.attachments_to_copy.back().password = parameter; o.attachments_to_copy.back().password = parameter;
} }
void void
ArgParser::argEndCopyAttachments() ArgParser::argEndCopyAttachment()
{ {
if (o.attachments_to_copy.back().path.empty()) if (o.attachments_to_copy.back().path.empty())
{ {

View File

@ -11,3 +11,134 @@ static constexpr char const* O_256_BIT_ENCRYPTION = "256-bit encryption";
static constexpr char const* O_UNDERLAY_OVERLAY = "underlay/overlay"; static constexpr char const* O_UNDERLAY_OVERLAY = "underlay/overlay";
static constexpr char const* O_ATTACHMENT = "attachment"; static constexpr char const* O_ATTACHMENT = "attachment";
static constexpr char const* O_COPY_ATTACHMENT = "copy attachment"; static constexpr char const* O_COPY_ATTACHMENT = "copy attachment";
void argHelp();
void argVersion();
void argCopyright();
void argJsonHelp();
void argShowCrypto();
void argPositional(char*);
void argAddAttachment();
void argAllowWeakCrypto();
void argCheck();
void argCheckLinearization();
void argCoalesceContents();
void argCopyAttachmentsFrom();
void argDecrypt();
void argDeterministicId();
void argEmpty();
void argEncrypt();
void argExternalizeInlineImages();
void argFilteredStreamData();
void argFlattenRotation();
void argGenerateAppearances();
void argIgnoreXrefStreams();
void argIsEncrypted();
void argJson();
void argKeepInlineImages();
void argLinearize();
void argListAttachments();
void argNewlineBeforeEndstream();
void argNoOriginalObjectIds();
void argNoWarn();
void argOptimizeImages();
void argOverlay();
void argPages();
void argPasswordIsHexKey();
void argPreserveUnreferenced();
void argPreserveUnreferencedResources();
void argProgress();
void argQdf();
void argRawStreamData();
void argRecompressFlate();
void argRemovePageLabels();
void argReplaceInput();
void argRequiresPassword();
void argShowEncryption();
void argShowEncryptionKey();
void argShowLinearization();
void argShowNpages();
void argShowPages();
void argShowXref();
void argStaticAesIv();
void argStaticId();
void argSuppressPasswordRecovery();
void argSuppressRecovery();
void argUnderlay();
void argVerbose();
void argWarningExit0();
void argWithImages();
void argCollate(char *);
void argSplitPages(char *);
void argCompressionLevel(char *);
void argCopyEncryption(char *);
void argEncryptionFilePassword(char *);
void argForceVersion(char *);
void argIiMinBytes(char *);
void argJsonObject(char *);
void argKeepFilesOpenThreshold(char *);
void argLinearizePass1(char *);
void argMinVersion(char *);
void argOiMinArea(char *);
void argOiMinHeight(char *);
void argOiMinWidth(char *);
void argPassword(char *);
void argPasswordFile(char *);
void argRemoveAttachment(char *);
void argRotate(char *);
void argShowAttachment(char *);
void argShowObject(char *);
void argCompressStreams(char *);
void argDecodeLevel(char *);
void argFlattenAnnotations(char *);
void argJsonKey(char *);
void argKeepFilesOpen(char *);
void argNormalizeContent(char *);
void argObjectStreams(char *);
void argPasswordMode(char *);
void argRemoveUnreferencedResources(char *);
void argStreamData(char *);
void argPagesPositional(char*);
void argPagesPassword(char *);
void argEndPages();
void argEncPositional(char*);
void argEndEncryption();
void argEnc40Extract(char *);
void argEnc40Annotate(char *);
void argEnc40Print(char *);
void argEnc40Modify(char *);
void argEnd40BitEncryption();
void argEnc128CleartextMetadata();
void argEnc128ForceV4();
void argEnc128Accessibility(char *);
void argEnc128Extract(char *);
void argEnc128Print(char *);
void argEnc128Assemble(char *);
void argEnc128Annotate(char *);
void argEnc128Form(char *);
void argEnc128ModifyOther(char *);
void argEnc128Modify(char *);
void argEnc128UseAes(char *);
void argEnd128BitEncryption();
void argEnc256ForceR5();
void argEnc256AllowInsecure();
void argEnd256BitEncryption();
void argUOPositional(char*);
void argUOTo(char *);
void argUOFrom(char *);
void argUORepeat(char *);
void argUOPassword(char *);
void argEndUnderlayOverlay();
void argAttPositional(char*);
void argAttReplace();
void argAttKey(char *);
void argAttFilename(char *);
void argAttCreationdate(char *);
void argAttModdate(char *);
void argAttMimetype(char *);
void argAttDescription(char *);
void argEndAttachment();
void argCopyAttPositional(char*);
void argCopyAttPrefix(char *);
void argCopyAttPassword(char *);
void argEndCopyAttachment();