Pango

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Pango
Original authorsOwen Taylor[1]
Raph Levien
DeveloperBehdad Esfahbod
Initial release11 July 1999; 27 years ago (1999-07-11)[2]
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inC
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemUnix-like, Microsoft Windows, Other
    TypeSoftware development library
    LicenseLGPL
    Websitewww.gtk.org/docs/architecture/pango

    Pango (stylized as Παν語) is a text (i.e. glyph) layout engine library which works with the HarfBuzz shaping engine for displaying multi-language text.[3]

    Full-function rendering of text and cross-platform support is achieved when Pango is used with platform APIs or third-party libraries, such as Uniscribe and FreeType, as text rendering backends. Pango-processed text will appear similar under different operating systems.[clarification needed]

    Pango is a special-purpose library for text and not a general-purpose graphics rendering library such as Cairo, with which Pango can be used. The Cairo documentation recommends Pango be used to "render" text rather than Cairo for all but the simplest text "rendering".[4]

    History and naming

    [edit | edit source]

    The name pango comes from Greek pan (παν, 'all') and Japanese go (, 'language').[5]

    In January 2000, the merger of the GScript and GnomeText projects was named Pango.[6][7][8][9][10][11]

    Pango version 1.0.0 was released 11 March 2002.[12][13]

    Support for OpenType features

    [edit | edit source]
    File:Pango locl demo.png
    Default rendering above, localized Romanian rendering below.

    Pango 1.17 and newer support the 'locl' feature tag that allows localized glyphs to be used for the same Unicode code point. Assuming you have Verdana version 5.01 installed, which supports the 'locl' feature for the latn/ROM (Romanian) script, a quick demonstration (on Linux) is:

    for lang in en ro
    do
        pango-view \
            --font="Verdana 64" \
            --text "şţ vs. șț in $lang" \
            --language=$lang
    done
    

    For an explanation of the substitutions rules for Romanian, see this discussion.

    Setting the locale via the POSIX environment variable, e.g. LANG=ro_RO.UTF-8 will also cause Pango to use 'locl' font feature. Finally, you can change the language on the fly in the same text using Pango markup, e.g.:

    pango-view \
        --font="Verdana 24" \
        --markup \
        --text 'In the same text: şţ(en) and <span lang="ro">şţ(ro).</span>'
    

    Since 1.37.1, Pango added more attributes to provide complete support for processing OpenType feature.[14][15][16]

    The official showcase of Pango's script-aware features is here.

    Major users

    [edit | edit source]
    File:GTK+ software architecture.svg
    Simplified software architecture of GTK. Pango, GDK, ATK, GIO, Cairo and GLib.

    Pango has been integrated into most Linux distributions. The GTK UI toolkit uses Pango for all of its text rendering.[17] The Linux versions of the Mozilla Firefox web browser and Mozilla Thunderbird mail client use Pango for text rendering.[18]

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    References

    [edit | edit source]
    1. ^ Interview: Red Hat's Owen Taylor on GTK+, also known for his contributions on Pango., by Eugenia Loli, 19th Dec 2003
    2. ^ Pango, Made version 0.2, Owen Taylor, redhat.com
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    15. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    16. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    17. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    18. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]