The FOP Project
The Apache FOP project creates paginated documents driven by XSL formatting objects (XSL-FO) into various formats (PDF, PostScript, AFP, PCL, AFP, XML (area tree representation), Print, AWT and PNG, and to a lesser extent, RTF and TXT). We help fill the gap between web and paged media by supporting a wide range of typesetting technologies including various font formats and a multitude of image types. The flexibility FOP provides allow it to be used either as a stand-alone application or in complex tool-chains to support business processes and deliver high quality communications. FOP also has a vast and vibrant community with a diverse range of backgrounds and experiences that support each other and are happy to help new comers.
FOP allows various font formats to be embedded in documents and as such has many classes that facilitate manipulating fonts (reading, embedding and subsetting). These classes, I believe, are too closely coupled to the rest of FOP and would be better served being extracted out into their own module as a fonts library. Modular code design from an OOP angle, allows for better encapsulation and the Single Responsibility principle makes code maintenance much simpler, thus making feature development easier and cheaper. As well as the code benefits, users could benefit from a Fonts library as well since it could be used by other Apache projects since there's no reason for such code to be bound to FOP.
One of the major benefits of this project is that the library already exists, so you've got plenty of battle-hardened code to use as inspiration. That would make all the irritating little bugs easier to handle, and more time/effort can be spent doing the fun stuff like proper code design. Designing the API to a library is no easy task, balancing flexibility with usability and designing this can be very rewarding.
This project would expose applicants to the various fonts specifications (AFP-fonts, TTF, OTF, Type1 fonts, PostScript fonts etc). It would teach how to design enterprise quality code to standardized specifications while working with a vibrant opensource community. All code must be written in Java (currently Java5).
Mentor: Mehdi Houshmand (firstname.lastname@example.org)