m-holger
126dd31cad
In JSONParser combine stacks
2023-02-04 13:53:23 +00:00
m-holger
6748bd33f7
In JSONParser::handleToken remove next_state
2023-02-04 13:53:23 +00:00
m-holger
29093a167b
In JSONParser::handleToken refactor container creation
2023-02-04 13:53:23 +00:00
m-holger
a39043f65e
In JSONParser::handleToken avoid creating JSON objects for dictionary keys
2023-02-04 13:53:23 +00:00
m-holger
f2e46c20b6
In JSONParser::handleToken move remaining validations into second switch statement
2023-02-04 13:53:23 +00:00
m-holger
0de032bcdd
In JSONParser::handleToken simplify setting of start and end
2023-02-04 13:53:22 +00:00
m-holger
77ceebd6c9
In JSONParser::handleToken move processing for ls_end_array and ls_end_dict into switch statement
2023-02-04 13:53:22 +00:00
m-holger
a7338ab15a
In JSONParser::handleToken move processing for ls_colon and ls_comma into switch statement
2023-02-04 13:53:22 +00:00
m-holger
4dba3c95dd
In JSONParser::handleToken move validation for ls_colon etc into switch statement
2023-02-04 13:53:22 +00:00
m-holger
6f94a3a89a
In JSONParser::handleToken move string decoding into switch statement
2023-02-04 13:53:22 +00:00
m-holger
fcc123a62a
Avoid copying delimiters in JSONParser::getToken
2023-02-04 13:53:22 +00:00
m-holger
bb89a60320
Add data member JSONParser::token_start
2023-02-04 13:52:55 +00:00
m-holger
39dfd305c8
In JSONParser add lexer states for delimiters
2023-02-04 13:44:39 +00:00
m-holger
1e0ab79aec
Remove redundant JSONParser::before_point etc
2023-02-01 14:19:08 +00:00
m-holger
83f972ceda
Refactor end of input handling in JSONParser
2023-02-01 14:18:57 +00:00
m-holger
8fd6e1c5b2
Refactor handling of ls_number in JSONParser::getToken
...
Reflect that the ls_number case only handles the digits after an 'e'.
Also, change state to ls_number for all 'ready' numbers.
2023-02-01 14:18:39 +00:00
m-holger
6ea543e6c7
In JSONParser add lex_state ls_number_e_sign
2023-02-01 14:12:32 +00:00
m-holger
04333bbc20
In JSONParser add lex_state ls_number_e
...
Also, allow 'E' as alternative to 'e'.
2023-02-01 14:09:39 +00:00
m-holger
972ebca505
In JSONParser add lex_state ls_number_after_point
2023-02-01 14:01:57 +00:00
m-holger
cdd1f0a9f6
In JSONParser add lex_state ls_number_point
...
Also. remove '.' as starting char in lsTop.
2023-02-01 14:01:57 +00:00
m-holger
bfda62aeeb
In JSONParser add lex_state ls_number_before_point
2023-02-01 14:01:57 +00:00
m-holger
08e768909d
In JSONParser add lex_state ls_number_leading_zero
2023-02-01 14:01:57 +00:00
m-holger
cba1c352e3
In JSONParser add lex_state ls_number_minus
2023-02-01 14:01:57 +00:00
m-holger
b6b4d3b299
Add new method JSONParser::numberError
2023-02-01 14:01:57 +00:00
m-holger
1787d85096
Refactor JSON::addDictionaryMember
2023-01-28 14:49:37 -05:00
m-holger
dce43d4f7f
Refactor JSON::JSON_string::write
2023-01-28 14:49:32 -05:00
m-holger
4c914aee96
Refactor JSON::writeDictionaryKey
2023-01-28 14:49:32 -05:00
m-holger
3dde66ddcd
Refactor JSON::writeNext
2023-01-28 14:49:32 -05:00
m-holger
dfa7d414f5
Refactor JSON::writeClose
2023-01-28 14:49:32 -05:00
Jay Berkenbilt
1308c45090
Implement --remove-restrictions ( fixes #833 )
2023-01-28 13:42:19 -05:00
Jay Berkenbilt
fe11f13d63
Add stub for --remove-restrictions
2023-01-28 13:24:45 -05:00
Jay Berkenbilt
acfc9db051
QPDFJob: switch to C++11-style field initializers
2023-01-28 13:24:30 -05:00
m-holger
d16308b3f5
Tune QPDFWriter::writeString etc methods
...
Use string_view parameters and call pipeline write methods directly.
2023-01-23 07:00:58 -05:00
m-holger
e8cdc46286
Tidy QPDFXRefEntry creation
2023-01-21 18:18:15 -05:00
Jay Berkenbilt
e4e0f40fc0
Fix annotations properly for page with no /Resources ( fixes #827 )
2023-01-09 07:31:39 -05:00
m-holger
aefb8ff9ef
Refactor QPDFWriter::writePad
2023-01-08 13:33:10 -05:00
m-holger
8363657cf3
Change QPDFWriter::object_queue to std::vector
2023-01-08 13:33:10 -05:00
m-holger
9c216a06d9
Tune QPDFWriter::enqueueObject
2023-01-08 13:33:10 -05:00
m-holger
60538f1958
Change QPDFParser::parse to use QPDFTokenizer::nextToken
2023-01-07 15:24:51 -05:00
m-holger
863d95e567
Add new method QPDFTokenizer::nextToken
2023-01-07 15:24:51 -05:00
m-holger
a07d2b4190
Only build QPDFTokenizer::val for name and string tokens
...
For all other token types val and raw_val are identical.
2023-01-07 15:24:51 -05:00
m-holger
59191ebbc4
Tune QPDFWriter::unparseObject
2023-01-07 13:27:17 -05:00
m-holger
942a2c3f68
Add new function QUtil::hex_encode_char
2023-01-06 18:42:12 -05:00
m-holger
1326ff7f79
Inline QPDFObjectHandle::dereference
2023-01-02 14:15:16 -05:00
m-holger
d7b470761b
Remove QPDFObjectHandle::Factory and ObjAccessor
2022-12-31 19:16:38 -05:00
m-holger
3f567ae02d
Refactor dictionary processing loop in QPDFParser::parse
2022-12-31 14:37:35 -05:00
m-holger
d67a54ae93
Tune parsing of dictionaries in QPDFParser::parse
...
Use move semantics for dictionary creation.
2022-12-31 14:37:35 -05:00
m-holger
846504129f
Remove redundant parameter qpdf from QPDFParser::warn
2022-12-31 14:37:35 -05:00
m-holger
b19e06fd8b
Change QPDFParser::setDescription to take a shared_ptr<QPDFObject> parameter
2022-12-31 14:37:35 -05:00
m-holger
8391022416
Avoid inserting direct null objects into olist
2022-12-31 14:37:35 -05:00
m-holger
9da50ca360
Change olist variable in QPDFParser::parse to vector<shared_ptr<QPDFObject>>
2022-12-31 14:37:35 -05:00
m-holger
e91e642cf3
Change object variable in QPDFParser::parse to shared_ptr<QPDFObject>
2022-12-31 14:37:35 -05:00
m-holger
ec35156ab0
Refactor QPDFValue::getDescription
...
Remove parameters and return the description.
2022-12-31 10:23:59 -05:00
m-holger
0ef2def8ad
Delay adding offsets to object descriptions until necessary
2022-12-31 10:23:59 -05:00
m-holger
c833c25499
Delay adding ObjGen to object descriptions until necessary
2022-12-31 10:23:59 -05:00
m-holger
e684d8169b
Make QPDFValue::object_description a shared pointer
2022-12-31 10:23:59 -05:00
m-holger
218f069a69
Add new method QPDFObject::setDefaultDescription
2022-12-31 10:23:59 -05:00
m-holger
d03ca88275
Refactor QPDFParser::setDescriptionFromInput and rename to setDescription
...
Set parsed offset at the same time as setting description.
2022-12-31 10:23:59 -05:00
m-holger
6cbc55a5b5
Add new virtual method QPDFObject::getStringValue
...
Avoid dynamic casting.
2022-12-31 09:31:07 -05:00
m-holger
0ca44ef84c
Fix QPDFObjectHandle::isScalar
...
Exclude uninitialized, destroyed and reserved objects.
2022-12-31 09:27:19 -05:00
m-holger
383f5a0077
Refactor QPDFWriter::enqueueObject
...
Move test for m->linearized outside loop.
2022-12-31 09:22:45 -05:00
m-holger
2693a082ab
Fix check for direct nulls in QPDFParser::parse
2022-12-15 13:07:42 -05:00
m-holger
cfcb279e49
Alternative fix logic for fixDanglingReferences
2022-12-06 15:21:34 -05:00
Jay Berkenbilt
ff42ea4e6c
Fix logic for fixDanglingReferences
2022-11-26 18:13:46 -05:00
m-holger
3f632458ae
Refactor QPDF::fixDanglingReferences
2022-11-26 16:26:42 -05:00
Jay Berkenbilt
562ff1b608
Rename function for pikepdf (for 11.2.0)
...
A new private overload of QPDF::makeIndirectObject breaks pikepdf's
build, so renaming function.
2022-11-20 16:04:58 -05:00
m-holger
4325e6e4a7
Refactor QPDFObjectHandle::copyObject and rename to makeDirect
2022-11-20 12:07:22 -05:00
m-holger
585ecf17c8
Remove redundant parameter cross_indirect from QPDFObjectHandle::copyObject
2022-11-20 12:07:22 -05:00
m-holger
ebc15f4dd0
Remove redundant parameter first_level_only from QPDFObjectHandle::copyObject
2022-11-20 12:07:22 -05:00
m-holger
64059014c9
Refactor QPDFObjectHandle::shallowCopy
2022-11-20 12:07:22 -05:00
m-holger
b1eb1a9584
Refactor QPDFObjectHandle::copyObject1
2022-11-20 12:07:22 -05:00
m-holger
3e3b79a774
Remove redundant parameter first_level_only from QPDFObjectHandle::shallowCopyInternal2 and copyObject2
2022-11-20 12:07:22 -05:00
m-holger
3efd665703
Remove redundant parameters cross_indirect and stop_atstreams from QPDFObjectHandle::copyObject1
2022-11-20 12:07:22 -05:00
m-holger
d7b8525235
Refactor QPDFObjectHandle::unsafeShallowCopy
2022-11-20 12:07:22 -05:00
m-holger
0289b21c3b
Remove redundant QPDFObjectHandle::copyObject2
...
copyObject2 repeats a second time what
new_obj = QPDFObjectHandle(obj->copy(true))
in shallowCopyInternal2 already did.
2022-11-20 12:07:22 -05:00
m-holger
15e8d3a763
Remove redundant parameter first_level_only from QPDFObjectHandle::shallowCopyInternal2 and copyObject2
2022-11-20 12:07:22 -05:00
m-holger
0827b1096e
Remove redundant parameters cross_indirect and stop_atstreams from QPDFObjectHandle::copyObject2
2022-11-20 12:07:22 -05:00
m-holger
63d1dcb414
Split QPDFObjectHandle::shallowCopyInternal and copyObject
...
Have separate versions for unsafeShallowCopy, shallowCopy and makeDirect.
2022-11-20 12:07:22 -05:00
m-holger
dbc5f07b90
Rename QPDFObject::shallowCopy to copy
...
Add optional parameter shallow. Change logic errors to runtime errors.
2022-11-20 12:07:22 -05:00
m-holger
34a6f8938f
Add methods QPDFTokenizer::Token::isWord
2022-11-20 11:55:02 -05:00
m-holger
dca70f13e7
Add method QPDFTokenizer::Token::isInteger
2022-11-20 11:55:02 -05:00
Jay Berkenbilt
e9980efec8
Correctly handle reuse of xref stream ( fixes #809 )
2022-11-19 17:03:17 -05:00
m-holger
d79a823d66
Remove QPDF_Stream::getOffset and QPDF_Stream::setObjGen
2022-11-19 14:10:42 -05:00
m-holger
6350cf16e6
Remove QPDF_Stream::offset
2022-11-19 14:10:42 -05:00
m-holger
3a86b893f7
Remove redundant parameters from QPDF_Stream::warn
2022-11-19 14:10:42 -05:00
m-holger
69e67b45bb
Remove QPDF_Stream qpdf and og data members
2022-11-19 14:10:42 -05:00
m-holger
bf347dfb73
Remove QPDFObjectHandle::Factory::newStream
2022-11-19 14:10:42 -05:00
m-holger
743a735ee0
Use QPDF::newStream in library
2022-11-19 14:10:42 -05:00
m-holger
9ebabd1953
Add new methods QPDF::newStream
2022-11-19 14:10:42 -05:00
m-holger
0a3c533186
Add private method QPDF::nextObjGen
2022-11-19 14:10:42 -05:00
m-holger
b3d71e1f58
Add private overload of QPDF::makeIndirectObject taking a QPDFObject shared_ptr
2022-11-19 14:10:42 -05:00
m-holger
fc64d0a371
Fix stray formatting error
2022-11-14 07:05:58 -05:00
Jay Berkenbilt
d94e6958ef
Fix stray formatting error
2022-10-08 17:05:11 -04:00
Jay Berkenbilt
2bc9121fa1
Fix major performance bug with openssl crypto ( fixes #798 )
...
Lazily load MD5 and RC4 once in the life of the program. Only load the
legacy provider if RC4 is actually being used.
2022-10-08 17:04:59 -04:00
Jay Berkenbilt
5c5b4e640e
Be more conservative about QPDF_DLL_CLASS with mingw ( fixes #799 )
...
* Define it even though previous experiments have shown it to be
unnecessary since it seems like it may be necessary after all
* Add QPDF_DLL_CLASS to QPDFObjectHelper and QPDFDocumentHelper in
case there's some future unknown reason why someone may want to have
them and/or in case it helps with the weird
QPDFNameTreeObjectHelper problem.
2022-10-06 08:40:08 -04:00
m-holger
d44bba3914
Fix typos in error message
2022-10-03 11:42:27 -04:00
m-holger
c63fb86c01
Inline call to QPDFObjectHandle::parse in QPDF::readObject
2022-10-01 11:17:39 -04:00
m-holger
cb0a6be983
Code tidy: use QPDF::toS and QPDF::toI where possible
2022-10-01 11:17:39 -04:00
m-holger
5ccab4be03
Add private methods QPDF::damagedPDF
2022-10-01 11:17:39 -04:00
Jay Berkenbilt
f4ca04cec1
Fix edge case in character encoding ( fixes #778 )
...
Avoid representing as PDF Doc encoding any string whose PDF Doc
encoding representation starts with a UTF-16 or UTF-8 marker.
2022-09-26 08:06:47 -04:00
m-holger
4fb7d1335a
Tune QPDF_String::useHexString()
2022-09-24 17:09:56 -04:00
m-holger
44a7aff56f
Refactor Pl_Buffer
...
Base implementation of the buffer on std::basic_string<unsigned char>.
2022-09-23 15:09:13 -04:00
m-holger
ae800361fe
Tune QUtil::hex_encode
2022-09-23 06:20:12 -04:00
m-holger
033a66e9a5
Tune unparsing of hex strings in QPDF_String::unparse
2022-09-23 06:20:12 -04:00
m-holger
2e6869483b
Replace calls to QUtil::int_to_string with std::to_string
2022-09-21 15:57:14 -04:00
Jay Berkenbilt
5796475a5e
Cosmetic: use default constructor for QPDFObjGen
2022-09-14 07:35:32 -04:00
Jay Berkenbilt
2394acf7a6
Remove explicit direct object check from getObject
...
An indirect object reference to 0, 0 is invalid. If it appears in the
file or is parsed from a string, the parser catches it. This check
would only be useful for someone explicitly calling getObject with 0,
0, and that would trigger an error during resolve().
2022-09-13 11:21:29 -04:00
Jay Berkenbilt
a0b1a18172
Remove redundant function calls
2022-09-13 11:20:28 -04:00
Jay Berkenbilt
31b2cfbb79
Fix up a few comments
2022-09-13 11:18:49 -04:00
Jay Berkenbilt
4963ce6a53
Remove obsolete LL_FMT check from build ( fixes #768 )
...
This was broken for cross-compilation and has probably been
unnecessary for several years now.
Also fix extraneous whitespace in related some tests.
2022-09-12 11:48:38 -04:00
Jay Berkenbilt
8a3cdfd2af
Change QPDFObjectHandle == to isSameObjectAs
...
Replace operator== and operator!=, which were testing for the same
underlying object, with isSameObjectAs. This change was motivated by
the fact that pikepdf internally had its own operator== method for
QPDFObjectHandle that did structural comparison. I backed out qpdf's
operator== as a courtesy to pikepdf (in my own testing) but also
because I think people might naturally assume that operator== does a
structural comparison, and isSameObjectAs is clearer in its intent.
2022-09-09 18:09:40 -04:00
Jay Berkenbilt
3dbab589e3
Add C API functions for using custom loggers
...
Expose functions to the C API to create new loggers and to setLogger
and getLogger for QPDF and QPDFJob.
2022-09-09 10:49:25 -04:00
Jay Berkenbilt
0ad4e190ff
Make QPDFLogger() private and provide create method
2022-09-09 07:03:29 -04:00
Jay Berkenbilt
f1a2d3160a
Add JSON v2 support to C API
2022-09-09 06:19:09 -04:00
Jay Berkenbilt
66f1fd2ad9
Switch user-supplied functions in C API to return int
2022-09-08 17:36:51 -04:00
Jay Berkenbilt
b0f054e600
Add ability to initialize Pl_Function with a C-style function
2022-09-08 17:35:27 -04:00
Jay Berkenbilt
18a583e8d9
Rename QPDFValueProxy back to QPDFObject
...
QPDFValueProxy wasn't a good name for it. We decided the evil of
having the header file be named QPDFObject_private.hh was less than
the evil of having the class be named something other than what it
should have been named.
2022-09-08 11:29:23 -04:00
Jay Berkenbilt
25ccc7eae4
Rename QPDFValueProxy.hh and QPDFValueProxy.cc
...
Preparing to change the class name back to QPDFObject
2022-09-08 11:19:49 -04:00
Jay Berkenbilt
c7a4967d10
Change reset to disconnect and clarify comments
...
I decided that it's actually fine to copy a direct object to another
QPDF. Even if we eventually prevent a QPDFObject from having multiple
parents, this could happen if an object is moved.
2022-09-08 11:06:15 -04:00
Jay Berkenbilt
dba61da1bf
Create a special "destroyed" type rather than using null
...
When a QPDF is destroyed, changing indirect objects to direct nulls
makes them effectively disappear silently when they sneak into other
places. Instead, we should treat this as an error. Adding a destroyed
object type makes this possible.
2022-09-08 10:36:39 -04:00
Jay Berkenbilt
264e25f391
Clear owning QPDF information for all objects, not just indirect
2022-09-08 10:19:38 -04:00
Jay Berkenbilt
9dcd25a06e
Remove superfluous call to resetObjGen
2022-09-08 10:19:38 -04:00
Jay Berkenbilt
4422588d7d
Remove unneeded owning_qpdf from QPDFValue
...
The qpdf member was already sufficient. Removing this actually fixed a
few pre-existing issues around detecting foreign ownership and
allowing certain conditions to be warnings rather than exceptions.
2022-09-08 10:19:38 -04:00
Jay Berkenbilt
0132261ee0
Revert getOwningQPDF, and add getQPDF that returns a reference
2022-09-07 17:26:39 -04:00
Jay Berkenbilt
76cd7ea67a
Clarify and improve QPDFPageObjectHelper::get*Box methods
...
Add copy_if_fallback and explain how it differs from copy_if_shared.
2022-09-06 19:00:40 -04:00
Jay Berkenbilt
c1def4ead4
Implement QPDFObjectHandle equality
2022-09-06 18:34:23 -04:00
Jay Berkenbilt
94c79bb8f6
Support --show-encryption without a valid password ( fixes #598 )
2022-09-06 12:45:12 -04:00
Jay Berkenbilt
6c61be00e8
Rename QPDFObject -> QPDFValueProxy
...
This is in preparation for restoring a QPDFObject.hh to ease the
transition on qpdf_object_type_e.
This commit was created by
* Renaming QPDFObject.cc and QPDFObject.hh
* Replacing QPDFObject\b with QPDFValueProxy (where \b is word
boundary)
* Running format-code
* Manually resorting files in libqpdf/CMakeLists.txt
* Manually refilling the comment in QPDF.hh near class Resolver
2022-09-05 18:52:59 -04:00
James R. Barlow
12967bdf8a
Take advantage of unique_ptr and move construction for Buffer
...
Since Buffer has always implemented its copy constructor with a deep
copy, its Members object will never have multiple owners. Change to unique_ptr.
Also implement move constructors for Buffer, since there may be cases
where a deep copy is not needed.
2022-09-05 13:29:56 -07:00
m-holger
9c86ba40d8
Fix commit 805c1ad
: Reset QPDFValue::qpdf and QPDFValue::og when ...
...
On destruction of the QPDF object replace all indirect object references
with direct nulls.
Remove all existing code to release resolved references.
Fixes performance issue due to interaction of resetting QPDFValue::qpdf and
og members and prior code.
2022-09-04 10:41:18 +01:00
Jay Berkenbilt
31396f61c9
Disallow --empty with --replace-input ( fixes #728 )
2022-09-02 09:37:17 -04:00
Jay Berkenbilt
a59e7ac7ec
Disable copying/assigning to QPDF objects, add QPDF::create()
2022-09-02 08:53:27 -04:00
Jay Berkenbilt
2a1ae0b44c
Remove remaining virtual functions from QPDFObject
...
This doesn't need an explicit destructor anymore.
2022-09-01 18:19:48 -04:00
Jay Berkenbilt
6d62662e2d
Make QPDFObject::releaseResolved public
...
Now that QPDFObject.hh is out of the public API, we don't really need
QPDFObjAccessor. Also, the function didn't have to be virtual anymore.
2022-09-01 18:19:47 -04:00
Jay Berkenbilt
c510c01568
Remove copyright banner from newly private header files
...
We don't put specific copyright banners on files that aren't installed.
2022-09-01 18:19:47 -04:00
Jay Berkenbilt
1d57772b76
Remove QPDFObject and QPDFValue from public include directory
2022-09-01 18:19:47 -04:00
Jay Berkenbilt
f772c43de8
Stop including QPDFObject.hh from other than private files
...
This required moving some newly inlined functions back to the cc file,
but that seems to have had no measurable performance impact.
2022-09-01 18:19:47 -04:00
Jay Berkenbilt
b663926538
Remove QPDFObject::object_type_e as alias for qpdf_object_type_e
2022-09-01 18:11:22 -04:00
Jay Berkenbilt
ceeb25f3c8
Rename --report-mem-usage to --report-memory-usage
...
Avd xcsv brvtns.
2022-09-01 17:15:41 -04:00
Jay Berkenbilt
481b1aeb50
Add comments after merge of last pull request
2022-09-01 17:15:41 -04:00
Jay Berkenbilt
3d029fb17e
Merge pull request #730 from m-holger/allpages
...
Tidy QPDF::getAllPagesInternal and QPDF::pushInheritedAttributesToPageInternal
2022-09-01 15:28:32 -04:00
m-holger
805c1ad479
Reset QPDFValue::qpdf and QPDFValue::og when the owning QPDF object gets destroyed
2022-09-01 17:20:16 +01:00
m-holger
2b7e9ba2f5
Remove methods and parameters obsoleted by the last two commits
2022-09-01 17:20:02 +01:00
m-holger
1bb40238e0
Add method QPDFObject::getObjGen and remove QPDFObjectHandle::og
2022-09-01 17:19:40 +01:00
m-holger
5033e3b215
Add method QPDFObject::getQPDF and remove QPDFObjectHandle::qpdf
2022-09-01 17:19:31 +01:00
m-holger
4a8515912c
Add method QPDFObject::resolve
2022-09-01 17:19:06 +01:00
m-holger
56e9bcabe9
Add methods QPDFObject::setObjGen and QPDFObject::resetObjGen
...
Also, modify QPDFObject::swapWith to update the ObjGens of the swapped
objects.
Modify QPDF::newIndirect and QPDF::updateCache to keep object ObjGens
up to date.
2022-09-01 17:09:48 +01:00
m-holger
89061d5b33
Change QPDF_Unresolved::create method to take QPDF* and QPDFObjGen parameters
2022-09-01 17:09:07 +01:00
m-holger
ae6e484e23
Change return type of QPDF::resolve to void
2022-09-01 17:08:45 +01:00
m-holger
356b582cec
Remove QPDFObjectHandle::newIndirect
...
Modify QPDFParser::parse to call QPDF::getObject instead.
2022-09-01 16:59:01 +01:00