Pango Status Report #3 16 Feb 2000 ====================================== General news: No major news this week. I spent most of it on straight hacking and documentation. Recent progress: In the last week, I first finished up the font API to handle listing font styles nicely. pango-viewer now has a nice simple 3-widget font selector at its top. Then I tackled writing an interface for representing attributed-text. You can find a design document at: http://www.pango.org/attributes.shtml and API reference docs at: http://www.pango.org/api/pango-text-attributes.html The idea of the attributed text API is to have something that is covers all the needs of the different components of Pango, and is also extensible to cover the needs of at least basic users of Pango. Once that was working reasonably, I changed the itemization process to take attributed text as its input. In theory, Pango should now be able to handle text with mutiple font styles in the same paragraph without any problem, though this has not been tested. Unfortunately, the last step revealed gross memory inefficiencies, leaks, etc. Starting up pango-viewer on HELLO.utf8 took 140 megs and 5 minutes at the first cut... With some memprof action and cache-fu, I got it back down to the point where it is at least as zippy and memory efficient as before. (A couple of seconds, 2.5 megs.) Most of the memory usage at this point is simply loading up the font metrics and conversion tables. Releases: Pango-0.7 is on available from www.pango.org. I've also built RPM's of pango, libunicode and libfribidi this time. The pango RPM's aren't all that exciting, since Pango isn't ready for use in other projects yet, but if you install them, you should be able to type: enough to install, and be able to do: $ pango-viewer /usr/doc/pango-0.7/HELLO.utf8 And see something like the screenshots. TODO highlights: The projects I intend to tackle next are: - Make a branch of GTK+, start seeing how Pango works out in real life. (Some parts of this, such as the Text widget and input in general, are major projects, so I don't expect to have this work hit the main branch of GTK+ for a while yet.) - Clean up the shaping portion to correspond to the changes I made to the itemization portion. This will involve rethinking the PangoItem structure a bit. - Start work on the PangoLayout object. (As a first step, it may be possible to simply move over the appropriate code portions from pango-viewer.) Some interesting projects that other people might want to consider: [ Same as last week. If that bores you, either start doing one of these, or send me suggestions for easier projects. ] - Write a libart based font-system and renderer to go along with the X based one. It would be good to have an idea about how well the interfaces work with something other than X before we get too far along. - Write an Arabic shaping module. A simple one shouldn't be too bad. With the Tamil and Korean modules, we are already doing more sophisticated stuff than are necessary for shaping Arabic characters for X, and the basic module already does simple bidirectional reordering for glyphs. (caveat: the module interfaces are not currently very documented, so this would involve lots of reading code and exploration) - Write a shaping engine for whatever language you are interested in. Misc stuff: There was some discussion on gtk-i18n-list this week about input methods. A number of people were interested in doing input methods that didn't go through XIM. It may be interesting to do support this using shared modules for input methods. Although it isn't strictly speaking part of Pango, work needs to start soon on figuring out how the input-method part of the equation works. Havoc has been working furiously away on his TkText port. I have a pretty clear picture now of how coverting this widget to Pango would work. We estimated that if doing layout Pango is 1/20th the speed of the current straight gdk/Xlib layout that it does, we'll be OK speedwise for a text widget. I'm sure we can do quite a bit better than that. It's not new news, but I ran across the Arphic TrueType fonts for Chinese this week: http://lwn.net/1999/1007/a/arphic.html They don't render all that well with the FreeType renderer, but still, its nice to have some free scaleable fonts for the Asian languages (there are also Korean fonts available; the set of free scaleable Japanese fonts seems to be small.) At some point we'll want to have a "finding fonts for Pango" page. There are quite a few fonts available for many languages but no good, up-to-date, comprehensive catalog that covers a wide range of languages. One thing that these fonts do make clear is that you have to be pretty careful about downloading the complete metrics for a scaleable font. They can take several seconds to compute for a Big5 font, even on a fast machine. There really needs to be some work done at the X server level to allow getting a list of available characters in a font without the metrics, and to allow downloading metrics incrementally. Owen Taylor