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
  


Last modified 31-May-2000
Owen Taylor <otaylor@redhat.com>