Age | Commit message (Collapse) | Author |
|
At the moment, when we create java Strings from string or name
PDFObjects, we assume they are all in javas not-quite-UTF-but-almost
encoding.
Here we assume they are in standard PDF format (namely that if
they do not start with one of 2 specific BOMs, that they are in
PDFDocEncoding). We update the code to convert to unicode, and
create strings from that.
This has the added side effect of correctly coping with 0 bytes
in the middle of string buffers.
|
|
|
|
Java has a convention that 'toString' should return a printable
version of an object. We cannot both support this, and support
a sane naming of functions to interpret pdf objects that begins
with 'to'. Instead use 'as'.
This means we have 'asBoolean', 'asInteger', 'asString' which
expect to work just on pdf objects of the required type. 'toString'
continues to work on all types and gives a printable version.
We split 'toByteString' into 2 separate functions, one for acting
on strings (asByteString) and one for acting on names (asByteName)
more nicely mirroring the C level functions (pdf_to_string and
pdf_to_name).
For simplicity of use, we add asString and asName functions that
return using java Strings rather than byte arrays. There are
potential encoding issues with these, but then there are throughout
our string handling at the moment, so we will deal with those in a
followup commit.
We also update the internal workings of several functions so
that they never return NULL pointers, but rather return the null
object. To avoid repeatedly creating new null objects we introduce
a global static PDFObject.Null object.
This is important as we want get("SomethingNonexistent") to return a
valid java object, so we can safely do things like:
get("Foo").get("Bar").get("Baz").asInteger()
without having to error check at every stage.
Update DocViewActivity to call the new versions.
|
|
Applications must be able to run e.g. Document.destroy() and later
set that reference to null and have the JVM successfully run the
finalizer an arbitrary time later. Previously the JVM would fail
to do so because the finalizer would throw an exception since the
native pointer was null.
|
|
|
|
As reasonable a place to call it as we can hope for. If we
ever have 2 documents open and we close 1 then it will dump
more blocks than we like, but when we get to that stage we
can worry about it then.
|
|
In the JNI code, we attach a cloned context onto each thread
we encounter in thread local storage. When the thread shuts
down, we should destroy that context.
This can theoretically be achieved on pthreads by using the
destructor registered to the tls slot. I have yet to see
Android ever actually call this destructor yet though.
No such mechanism exists for windows thread, so we'll just leak
here for now. There is a potential fix for this, but it's
hairy, so details are left in a comment in the code.
|
|
If Java code creates e.g. a Document object and later calls
Document.destroy() and then keeps using the Document object
the library would end up crashing because the native pointer
was null. This case rather special case is now handled.
|
|
The underlying pdf_dict_put() converts into a null object.
|
|
But do not check it twice.
|
|
|
|
|
|
This case can be handled gracefully since commit
2d3eca6dec6b8fc7a169b3fc357904069df6b6c4.
|
|
|
|
The JNI interface throws exceptions of its own,
keep those instead of replacing them.
|
|
|
|
|
|
Also there is no need to check self pointer since JVM does not
even call the JNI binding for null pointers.
|
|
|
|
This avoids a symbol clash when using scripts/destatic.sh
|
|
|
|
|
|
|
|
By making the scope smaller fitz exceptions and Java exceptions
can be disentangled. This makes it clearer what happens in failure
cases.
|
|
|
|
If a large number of text spans uses a huge number of fonts
the JMV may run out of local references since we never cleaned
up the local reference to the font objects.
|
|
The Java arrays are the destination when reading from Buffer.
|
|
|
|
|
|
|
|
|
|
Adding to_Rect_safe(), to_jRectArray_safe(), to_ColorSpace_safe()
to_Image_safe() and to_Point_safe() disentangles fitz exceptions
from Java exception and also makes the code more uniform.
|
|
|
|
Including removal of unnecessary #ifdef.
|
|
|
|
|
|
Previously all exceptions thrown by the library would be converted
into checked exceptions, but there was no sensible response to
expect from a client.
|
|
|
|
|
|
The arguments will be freed by the finalizer of the object.
The finalizer for an object is called even if the constructor
throws an Exception or an OutOfMemoryError.
|
|
|
|
If an object reference is NULL the JVM will signal
NullPointerException before the JNI-code is executed.
|
|
The return value from CallObjectMethod() is not valid if an exception
is thrown, so check for exceptions before looking at the return value.
Mentioned at http://developer.android.com/training/articles/perf-jni.html
|
|
|
|
|
|
|
|
|
|
Fixes two compiler warnings.
|
|
|
|
classes.
|