mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
Add QPDFObjectHandle::parse for strings with context
This commit is contained in:
parent
7eb903d9aa
commit
a773f4c71d
@ -1,3 +1,9 @@
|
|||||||
|
2021-02-15 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Add a version of QPDFObjectHandle::parse that takes a QPDF* as
|
||||||
|
context so that it can parse strings containing indirect object
|
||||||
|
references.
|
||||||
|
|
||||||
2021-02-14 Jay Berkenbilt <ejb@ql.org>
|
2021-02-14 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* Add new versions of QPDFObjectHandle::replaceStreamData that
|
* Add new versions of QPDFObjectHandle::replaceStreamData that
|
||||||
|
@ -379,6 +379,20 @@ class QPDFObjectHandle
|
|||||||
static QPDFObjectHandle parse(std::string const& object_str,
|
static QPDFObjectHandle parse(std::string const& object_str,
|
||||||
std::string const& object_description = "");
|
std::string const& object_description = "");
|
||||||
|
|
||||||
|
// Construct an object of any type from a string representation of
|
||||||
|
// the object. Indirect object syntax (obj gen R) is allowed and
|
||||||
|
// will create indirect references within the passed-in context.
|
||||||
|
// If object_description is provided, it will appear in the
|
||||||
|
// message of any QPDFExc exception thrown for invalid syntax.
|
||||||
|
// Note that you can't parse an indirect object reference all by
|
||||||
|
// itself as parse will stop at the end of the first complete
|
||||||
|
// object, which will just be the first number and will report
|
||||||
|
// that there is trailing data at the end of the string.
|
||||||
|
QPDF_DLL
|
||||||
|
static QPDFObjectHandle parse(QPDF* context,
|
||||||
|
std::string const& object_str,
|
||||||
|
std::string const& object_description = "");
|
||||||
|
|
||||||
// Construct an object as above by reading from the given
|
// Construct an object as above by reading from the given
|
||||||
// InputSource at its current position and using the tokenizer you
|
// InputSource at its current position and using the tokenizer you
|
||||||
// supply. Indirect objects and encrypted strings are permitted.
|
// supply. Indirect objects and encrypted strings are permitted.
|
||||||
|
@ -1692,13 +1692,21 @@ QPDFObjectHandle::wrapInArray()
|
|||||||
QPDFObjectHandle
|
QPDFObjectHandle
|
||||||
QPDFObjectHandle::parse(std::string const& object_str,
|
QPDFObjectHandle::parse(std::string const& object_str,
|
||||||
std::string const& object_description)
|
std::string const& object_description)
|
||||||
|
{
|
||||||
|
return parse(nullptr, object_str, object_description);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPDFObjectHandle
|
||||||
|
QPDFObjectHandle::parse(QPDF* context,
|
||||||
|
std::string const& object_str,
|
||||||
|
std::string const& object_description)
|
||||||
{
|
{
|
||||||
PointerHolder<InputSource> input =
|
PointerHolder<InputSource> input =
|
||||||
new BufferInputSource("parsed object", object_str);
|
new BufferInputSource("parsed object", object_str);
|
||||||
QPDFTokenizer tokenizer;
|
QPDFTokenizer tokenizer;
|
||||||
bool empty = false;
|
bool empty = false;
|
||||||
QPDFObjectHandle result =
|
QPDFObjectHandle result =
|
||||||
parse(input, object_description, tokenizer, empty, 0, 0);
|
parse(input, object_description, tokenizer, empty, 0, context);
|
||||||
size_t offset = QIntC::to_size(input->tell());
|
size_t offset = QIntC::to_size(input->tell());
|
||||||
while (offset < object_str.length())
|
while (offset < object_str.length())
|
||||||
{
|
{
|
||||||
|
@ -5194,6 +5194,14 @@ print "\n";
|
|||||||
<classname>QPDFObjectHandle</classname> object.
|
<classname>QPDFObjectHandle</classname> object.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Add a version of
|
||||||
|
<function>QPDFObjectHandle::parse</function> that takes a
|
||||||
|
<classname>QPDF</classname> pointer as context so that it
|
||||||
|
can parse strings containing indirect object references.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Re-implement <classname>QPDFNameTreeObjectHelper</classname>
|
Re-implement <classname>QPDFNameTreeObjectHelper</classname>
|
||||||
|
@ -1319,6 +1319,9 @@ void runtest(int n, char const* filename1, char const* arg2)
|
|||||||
std::cout << "trailing data: " << e.what()
|
std::cout << "trailing data: " << e.what()
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
}
|
}
|
||||||
|
assert(QPDFObjectHandle::parse(
|
||||||
|
&pdf, "[1 0 R]", "indirect test").unparse() ==
|
||||||
|
"[ 1 0 R ]");
|
||||||
}
|
}
|
||||||
else if (n == 32)
|
else if (n == 32)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user