Feb 6, 2010

Pango Note

Text layout library
Supports different font technologies:
    * Classic X fonts
    * TrueType fonts (using FreeType)
    * OpenType fonts (using Xft/XRender/FreeType)
• Win32 fonts

Pango architecture

Supported Language
    * European languages
    * Asian languages (Chinese, Japanese, Korean, ...)
    * Middle Eastern languages (Arabic, Hebrew, Farsi,...)
    * Indic languages (Devanagari, Bengali, Gujarati, Gurmukhi, Burmese)

Pango has markup language !!!

Pango GL patch http://www.mail-archive.com/pysoy-svn@pysoy.org/msg00761.html
PangoOpenGLRenderer A tale of


Thebes: alternative to Pango used in Mozilla


Cairo vs. Qt


Some text layouting link
• http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=CmplxRndExamples
The main characteristics of CTL language complexity are:
    * Bi-directional text, where characters may be written from either right-to-left or left-to-right direction.
    * Context-sensitive shaping (ligatures), where a character may change its shape, dependent on its location and/or the surrounding characters. For example, a character in Arabic script can have at least four different shape forms, depending on context.
    * Ordering, the displayed order of the characters is not the same as the logical order. For example, in Devanagari, which is written from left to right, the grapheme for "short i" appears to the left of ("before") the preceding consonant: in कि ki, the ि -i should render on the left, its bow reaching until above the क k- to the right.

Performs font rasterization. Given font data (file or data in memory), it does simple (non-complex) mapping of Unicode characters to glyph indices and rendering glyphs to images.
Performs font selection based on a pattern of desired font characteristics. These characteristics typically include a family name, style, weight, slant, size, as well as language. Font configuration happens by way of a set of very expressive XML rules. Fontconfig uses FreeType to inspect fonts and caches the results in an mmap()able architecture-specific binary cache.
GNU FriBidi is an implementation of the Unicode Bidirectional Algorithm. Pango uses FriBidi and has an internal copy of it. AbiWord is the other major user of FriBidi. Many other projects use FriBidi as the simplest route to add support for Hebrew and Arabic scripts without adding support for a full complex text rendering engine.
HarfBuzz is the meat of the modern GNU/Linux text rendering stack. With OpenType emerging as the universal font format supporting complex text rendering, HarfBuzz, as an OpenType Layout engine, is where all the magic happens. In fact it is of such importance to the stack that it deserves an entire section of its own in this document.
Pango is, for the most part, the roof of the text rendering stack. Components sitting on top of Pango (eg. GTK+) need not know about complexities of i18n text and are expected to simply use these opaque objects called PangoLayout's. Pango has been designed to satisfy GTK+'s needs for i18n text. However, Pango still provides a low-level API on which one can build their own layout engine. This is what Firefox, Webkit-GTK, etc do, but it has proved to be a cumbersome practice. We will expand on that later.

A good link on software stack - http://maemo.org/maemo_release_documentation/maemo4.1.x/node6.html

1 comment:

sfauthor said...

Nice posting. Do you know about these Devanagari books?