Streams and Filters
This is the weekly report about the development of the GNU PDF project.
Changes to the Streams Implementation
This week we have been polishing a bit the stream design commited the last week. Juan Pedro Bolivar Puente and Gerardo E. Gidoni provided quite interesting points such as to not use the use of hash tables to maintain the internal state of the filters (using a void pointer instead), to use a specific dealloc function in each filter implementation and to use memcpy instead of strcpy in order to avoid problems with null characters (yes, the maintainer sometimes has big reasoning problems ;)).
We also determine that we need to maintain a minimum cache size in the stream filters in order to avoid problems when finalising the filters. It is the consequence of a design flaw, but it is not really important since we plan to use the system page size (usually 4k) for the cache. By far more than necessary by any filter implementation.
Unit Tests for the Hash Module
We are using lcov to generate a code coverage report in http://www.gnupdf.org/prmgt/coverage. The primary use of the coverage report is to determine the extension of testing code.
This week we realised that the coverage of the Hash Tester functions was not good at all, so Gerardo E. Gidone provided a bunch of new unit tests and now the coverage of pdf-hash-helper.c is at 100%! Quite nice.
Filter Implementations
This week we completed the implementation of four filters: an encoder and a decoder for ASCII Hex and an encoder and a decoder for RunLength.
We plan to have implementation for all the PDF standard filters quite soon.
Still Missing Examples
Unfortunately a lot of existing function entries (more than 90 actually) are lacking a proper usage example. We are looking for a volunteer to take over this task. If you have some spare time that you would want to donate to do this task please write to the development mailing list.
The big picture
We are getting close to complete the base layer of the library. After that milestone we will start working in the next layer: the object layer.