aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
AgeCommit message (Collapse)Author
2022-06-18QPDF, QPDFJob: use QPDFLogger instead of custom output streamsJay Berkenbilt
2022-06-18Add and test QPDFLogger classJay Berkenbilt
2022-05-31In json mode, reveal recovered user password when otherwise unavailableJay Berkenbilt
2022-05-31Add additional information when listing attachmentsJay Berkenbilt
2022-05-21Change default decode level to "none" with --json-outputJay Berkenbilt
2022-05-21Add another binary utf8 to JSON testJay Berkenbilt
2022-05-21Allow empty b: binary JSON stringsJay Berkenbilt
2022-05-21Code clean up: use range-style for loops wherever possiblem-holger
Remove variables obsoleted by commit 4f24617.
2022-05-21Add json to large file testJay Berkenbilt
2022-05-20Exercise object description in testsJay Berkenbilt
2022-05-20Add test for bad data and bad datafileJay Berkenbilt
2022-05-20Test --update-from-jsonJay Berkenbilt
2022-05-20Test (and fix) handling of dangling referencesJay Berkenbilt
2022-05-20Explicitly test ignoring unknown keys in JSON inputJay Berkenbilt
2022-05-20Make version default to latest for --json-output (like --json)Jay Berkenbilt
2022-05-20Round-trip tests with --json-stream-data=fileJay Berkenbilt
2022-05-20Tests with manually constructed qpdf jsonJay Berkenbilt
2022-05-20Add tests for --json-inputJay Berkenbilt
2022-05-20Add more names and strings in good13Jay Berkenbilt
* native UTF-8 strings * names whose PDF and canonical syntax differ in both dictionary key positions and other positions For json, names are converted both as names and directly when used as dictionary keys.
2022-05-20Rename all test files: _ to -Jay Berkenbilt
2022-05-20Major rework -- see long commentsJay Berkenbilt
* Replace --create-from-json=file with --json-input, which causes the regular input to be treated as json. * Eliminate --to-json * In --json=2, bring back "objects" and eliminate "objectinfo". Stream data is never present. * In --json-output=2, write "qpdf-v2" with "objects" and include stream data.
2022-05-20Back out fluent QPDFObjectHandle methods. Keep the andGet methods.Jay Berkenbilt
I decided these were confusing and inconsistent with how JSON works. They muddle the API rather than improving it.
2022-05-20Parse objects; stream data is not yet handledJay Berkenbilt
2022-05-16Implement top-level qpdf json parsingJay Berkenbilt
2022-05-16Remove offset from missing /Root errorJay Berkenbilt
The last offset is irrelevant to not being able to find /Root.
2022-05-14Split qpdf.test into multiple test suitesJay Berkenbilt
This makes it a lot easier to run parts of the test suite.
2022-05-08Add maxobjectid to JSONJay Berkenbilt
2022-05-08Add --to-json optionJay Berkenbilt
2022-05-08Test inline stream data with different decode levelsJay Berkenbilt
2022-05-08Test json v2 with invalid stream dataJay Berkenbilt
2022-05-08Implement JSON v2 outputJay Berkenbilt
2022-05-08Apply script across future v2 test filesJay Berkenbilt
There is one unexpected pass in this commit. This script was applied to the files changed in this commit: ---------- #!/usr/bin/env python3 import json import sys def json_dumps(data): return json.dumps(data, ensure_ascii=False, indent=2, separators=(',', ': ')) for filename in sys.argv[1:]: with open(filename, 'r') as f: data = json.loads(f.read()) data['version'] = 2 objectinfo = {} if 'objectinfo' in data: objectinfo = data['objectinfo'] del data['objectinfo'] if 'objects' not in data: continue qpdf = {'jsonversion': 2, 'pdfversion': '1.3', 'objects': {}} for k, v in data['objects'].items(): is_stream = objectinfo.get(k, {}).get('stream', {}).get('is', False) if k.endswith(' R'): k = 'obj:' + k if is_stream: v = {'stream': {'dict': v}} else: v = {'value': v} qpdf['objects'][k] = v data['qpdf'] = qpdf del data['objects'] print(json_dumps(data)) ----------
2022-05-08Prepare test suite for json v2Jay Berkenbilt
2022-05-08Fix typo in json output key nameJay Berkenbilt
moddify -> modify. Also carefully spell checked all remaining keys by splitting them into words and running a spell checker, not just relying on visual proofreading. That was the only one.
2022-05-08Implement JSON v2 for StreamJay Berkenbilt
Not fully exercised in this commit
2022-05-08Implement JSON v2 for StringJay Berkenbilt
Also refine the herustic for deciding whether to use hexadecimal notation for a string.
2022-05-07Prepare code for JSON v2Jay Berkenbilt
Update getJSON() methods and calls to them
2022-05-07Objectinfo json: write incrementally and in numeric orderJay Berkenbilt
This script was used on test data: ---------- #!/usr/bin/env python3 import json import sys import re def json_dumps(data): return json.dumps(data, ensure_ascii=False, indent=2, separators=(',', ': ')) for filename in sys.argv[1:]: with open(filename, 'r') as f: data = json.loads(f.read()) if 'objectinfo' not in data: continue trailer = None to_sort = [] for k, v in data['objectinfo'].items(): if k == 'trailer': trailer = v else: m = re.match(r'^(\d+) \d+ R', k) if m: to_sort.append([int(m.group(1)), k, v]) newobjectinfo = {x[1]: x[2] for x in sorted(to_sort)} if trailer is not None: newobjectinfo['trailer'] = trailer data['objectinfo'] = newobjectinfo print(json_dumps(data)) ----------
2022-05-07Objects json: write incrementally and in numeric orderJay Berkenbilt
The following script was used to adjust test data: ---------- #!/usr/bin/env python3 import json import sys import re def json_dumps(data): return json.dumps(data, ensure_ascii=False, indent=2, separators=(',', ': ')) for filename in sys.argv[1:]: with open(filename, 'r') as f: data = json.loads(f.read()) if 'objects' not in data: continue trailer = None to_sort = [] for k, v in data['objects'].items(): if k == 'trailer': trailer = v else: m = re.match(r'^(\d+) \d+ R', k) if m: to_sort.append([int(m.group(1)), k, v]) newobjects = {x[1]: x[2] for x in sorted(to_sort)} if trailer is not None: newobjects['trailer'] = trailer data['objects'] = newobjects print(json_dumps(data)) ----------
2022-05-07Top-level json: write incrementallyJay Berkenbilt
This commit just changes the order in which fields are written to the json without changing their content. All the json files in the test suite were modified with this script to ensure that we didn't get any changes other than ordering. ---------- #!/usr/bin/env python3 import json import sys def json_dumps(data): return json.dumps(data, ensure_ascii=False, indent=2, separators=(',', ': ')) for filename in sys.argv[1:]: with open(filename, 'r') as f: data = json.loads(f.read()) newdata = {} for i in ('version', 'parameters', 'pages', 'pagelabels', 'acroform', 'attachments', 'encrypt', 'outlines', 'objects', 'objectinfo'): if i in data: newdata[i] = data[i] print(json_dumps(newdata)) ----------
2022-05-07Test json against schema only on demandJay Berkenbilt
Testing json against schema requires an in-memory copy, so do it only when requested by the test suite.
2022-05-07Add next to Pl_String and fix commentsJay Berkenbilt
2022-05-04Add new FileInputSource constructorsJay Berkenbilt
2022-05-04Make "objects" and "pages" consistent in JSON outputJay Berkenbilt
2022-05-04Add new Pl_String PipelineJay Berkenbilt
2022-05-04Add new Pl_OStream PipelineJay Berkenbilt
2022-05-04Make use of the new Pipeline methods in some placesJay Berkenbilt
2022-05-04Make Pipeline::write take an unsigned char const* (API change)Jay Berkenbilt
2022-05-04Make assert handling less error-proneJay Berkenbilt
Prevent my future self or other contributors from using assert in tests and then having that assert not do anything because of the NDEBUG macro.
2022-04-30Mark weak encryption with API changes (fixes #576)Jay Berkenbilt